首页后端开发JAVAjava并发编程(十一)

java并发编程(十一)

时间2023-07-05 13:07:02发布访客分类JAVA浏览912
导读:38、volatile 的作用是保证多线程环境下的可见性和禁止指令重排。应用场景包括:多个线程对同一个变量进行读写操作,需要保证每次读取到的是最新的值;多个线程对同一个变量进行修改操作,需要保证每个线程修改后的值都能被其他线程看到。代码示例...

38、volatile 的作用是保证多线程环境下的可见性和禁止指令重排。应用场景包括:

  • 多个线程对同一个变量进行读写操作,需要保证每次读取到的是最新的值;
  • 多个线程对同一个变量进行修改操作,需要保证每个线程修改后的值都能被其他线程看到。

代码示例:

public class VolatileExample {
    
    private volatile int count = 0;


    public void increment() {
    
        for (int i = 0;
     i  1000000;
 i++) {
    
            count++;

        }

    }


    public int getCount() {
    
        return count;

    }

}

39、代码会重排序是因为编译器和处理器在执行过程中会对代码进行优化,可能会改变代码的顺序。

40、wait 和 sleep 方法的不同在于,wait 方法会让当前线程等待指定的时间后再继续执行,而 sleep 方法会让当前线程暂停一段时间后再继续执行。

代码示例:

Thread thread = new Thread(new Runnable() {

    @Override
    public void run() {

        try {

            // do something
        }
 catch (InterruptedException e) {
    
            e.printStackTrace();

        }

    }

}
    );
    
thread.start();
    
// wait for thread to finish
thread.join();
    

42、共享数据可以使用 synchronized 或者 Lock 来实现。synchronized 是 Java 中最基本的同步机制,Lock 则是一种更灵活的同步机制,可以控制锁的获取和释放。

代码示例:

private Object lock = new Object();

public void shareData(Object data) {

    synchronized (lock) {
    
        // shared data is accessed by multiple threads
        System.out.println("Accessing shared data");
    
        data.add(1);

    }

}
    

43、notify 和 notifyAll 的区别在于,notify 只会通知一个线程,而 notifyAll 会通知所有等待该对象锁的线程。

代码示例:

private Object lock = new Object();

public void notify() {

    synchronized (lock) {
    
        // only one thread will be notified
        System.out.println("Notifying thread");

    }

}


public void notifyAll() {

    synchronized (lock) {
    
        // all waiting threads will be notified
        System.out.println("Notifying all threads");

    }

}

44、wait、notify 和 notifyAll 不在 Thread 类里面是因为它们是接口,而不是具体的方法。这些方法是由 Object 类中的 wait()、notify() 和 notifyAll() 实现的。

45、ThreadLocal 变量是一种线程局部变量,它可以让每个线程拥有自己的变量副本,避免了线程安全问题。

代码示例:

public class ThreadLocalExample {
    
    private static ThreadLocalInteger>
     threadLocal = new ThreadLocal>
    ();


    public static void setValue(int value) {
    
        threadLocal.set(value);

    }


    public static int getValue() {
    
        return threadLocal.get();

    }
    

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

java并发并发编程高并发

若转载请注明出处: java并发编程(十一)
本文地址: https://pptw.com/jishu/290288.html
九宫格随机抽奖(html篇) html文本框

游客 回复需填写必要信息