多线程之线程间通信

  1. 主要是线程之间彼此相互通信和写作
  2. 等待/通知机制(wait/nofity),wait方法将当前线程置入"预执行队列"中,并在wait方法处停止,当前线程释放线程锁,notify对一个呈wait线程,发送通知,并使它获取对象锁.执行nofity方法后,并不是立即释放该对象锁,而是等到notify线程将方法执行完之后才会释放锁.即退出synchronized方法之后,wait状态的线程会获得该对象锁.
  3. notifyAll 方法可以使所有正在等待的队列中等待同一共享资源的"全部"线程从等待状态中退出,进入可运行状态.此时,优先级最高的线程先执行,也可能是随机.
  4. wait方法执行后,锁自动释放,但执行完notify方法,锁不自动释放,需要执行完notify所在的synchronize方法后,锁才释放.
  5. 当线程呈wait状态时,调用线程对象的interrupt方法会出现interruptedException异常.
  6. wait(long)方法功能是等待某一时间是否有线程对锁进行唤醒,如果超过这个时间自动唤醒.例如:wait(5000)
  7. 注意:通知过早,  有可能会出现先notify,然后再wait情况,这样就会导致wait永远也不会被通知.
  8. wait/nofity模式时,wait等待的条件改变,也容易造成程序逻辑的混乱.
  9. 通过管道进行线程间通信:字节流(PipedInputStream,PipedOutputStream,PipedReader,PipedWriter),字符流
  10. join(使用情况,子线程处理一个数据,主线程要取得这个数据)
  11. join方法具有使线程排队运行的作用.
  12. join(long) 参数是设定等待的时间
  13. join(long)内部使用wait(long)实现, 所以join(long)方法具有释放锁的特点.
  14. ThreadLocal主要解决就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放的盒子,盒子中可以存储每个线程的私有数据.
  15. InheritThreadLocal类可以让子线程从父线程中取得值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值