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