电子商务网站建设与管理a,网站开发用户需求,杭州网站建设路,响应式品牌网站推荐链接#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD… 推荐链接 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoDB】 总结——》【Elasticsearch】 Java——》线程间是如何通信的 一、共享内存二、消息传递1、wait()和notify()方法2、wait(long timeout)和notify()方法3、join()方法4、Lock和Condition接口5、BlockingQueue阻塞队列 线程之间的通信有两种方式共享内存和消息传递。
一、共享内存
在共享内存的并发模型里线程之间共享程序的公共状态线程之间通过写-读内存中的公共状态来隐式进行通信。 典型的共享内存通信方式就是通过共享对象进行通信。 例如线程A与线程B之间如果要通信的话那么就必须经历下面两个步骤
线程A把本地内存A更新过的共享变量刷新到主内存中去。线程B到主内存中去读取线程A之前更新过的共享变量。
二、消息传递
在消息传递的并发模型里线程之间没有公共状态线程之间必须通过明确的发送消息来显式进行通信。 在Java中典型的消息传递方式
wait()和notify()方法wait(long timeout)和notify()方法join()方法Lock和Condition接口BlockingQueue阻塞队列
1、wait()和notify()方法
wait()方法使线程进入等待状态直到其他线程调用notify()或notifyAll()方法将其唤醒。notify()方法唤醒一个等待中的线程notifyAll()方法唤醒所有等待中的线程。
2、wait(long timeout)和notify()方法
wait(long timeout)方法使线程进入等待状态直到其他线程调用notify()方法将其唤醒或者等待时间超过指定的timeout时间。notify()方法唤醒一个等待中的线程。
3、join()方法
join()方法使一个线程等待另一个线程执行完毕。当一个线程调用另一个线程的join()方法时当前线程将被阻塞直到另一个线程执行完毕。
4、Lock和Condition接口
Lock接口提供了比synchronized关键字更灵活的锁机制Condition接口提供了更灵活的等待/通知机制。 通过Lock接口的lock()方法获取锁unlock()方法释放锁。 通过Condition接口的await()方法使线程等待signal()方法唤醒一个等待中的线程signalAll()方法唤醒所有等待中的线程。
5、BlockingQueue阻塞队列
BlockingQueue是一个支持阻塞操作的队列。 当队列为空时获取元素的线程将被阻塞直到队列中有可用元素 当队列满时插入元素的线程将被阻塞直到队列有空闲位置。