Java多线程(7):线程间的通信
1.轮询方式
while(true){
// 判断条件
}
2.wait/notify:
改变线程对象的状态:
notifyAll()唤醒所有线程
通知过早 会打乱程序正常的运行逻辑
wait等待的条件发生了变化 也容易造成程序逻辑的混乱
条件判断if/while
3.管道
用于在不同线程间直接传输数据 一个线程发送数据到输出管道 另一个线程从输入管道中读数据 通过使用管道
实现不同线程间的通信 而无须借助于类似临时文件之类的东西
1.PipedInputStream和PipedOutputStream
2.PipedReader和PipedWriter
字符流 类似
等待/通知交叉备份:
join方法的使用:
主线程创建并启动子线程 如果子线程需要进行耗时运算 主线程往往将早于子线程结束之前结束
这时 如果主线程想等待子线程执行完之后再结束 比如子线程处理一个数据 主线程要取得这个数据中的值 就要用到join()方法了
join方法的作用就是等待线程对象的销毁
在join过程中 如果当前线程对象被中断 则当前线程出现异常
单位是毫秒
join(long)的功能在内部是使用wait(long)方法来实现的 所以join(long)方法具有释放锁的特点