Java 线程间怎样通信,你知道吗

java线程间通信有以下两种方式

1、共享内存

线程之间共享程序的 公共状态,通过写-读内存中的公共状态进行隐式通信

2、消息传递

线程之间通过发送消息 来显示进行通信

具体的线程之间通信

1、volatile 和 synchronized

volatile

可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须刷新回共享内存,它能保证所有线程对变量的访问的可见性

synchronized
可以修饰方法或者以同步块的形式进行使用,它主要确保多个线程在同一时刻,只能有一个线程处于方法或者同步块中,它 保证了线程对变量方法的可见性和排他性。

2、等待、通知(wait,notify) - 生产者 消费者

等待方

synchronized(对象)
{
    
    
   while(条件不满足){
    
    
     对象.wait();
   }
对应的处理逻辑
}

(1) 获取对象的锁
(2) 如果条件不满足,那么调用对象的wait方法,被通知后扔要检查条件
(3) 条件满足则执行对应的逻辑

通知方
(1) 获得对象的锁
(2)改变条件
(3)通知所有等待对象上的线程

3、Thread.join()

4、ThreadLocal

ThreadLocal和Synchonized都用于解决多线程并发訪问

史上最全的并发编程脑图:https://www.processon.com/view/5b1f1ad7e4b03f9d251c06e5#map

猜你喜欢

转载自blog.csdn.net/fd2025/article/details/108326106