多线程---线程间的通信

1、wait()

在调用wait()之前,线程必须得到该对象的对象级别锁,也就是说wait()只能在同步方法或同步代码块中调用。执行wait()方法后,当前线程会释放锁,wait()后面的代码如需执行,需要其他线程调用notify()/notifyAll()

2、notify()/notifyAll()

与wait()方法相同,需要在同步方法或同步代码块中调用。用于通知那些可能在等待锁的其他线程,使其等待获得对象锁。

备注:在执行notify()之后,当前线程不会立即释放锁,wait状态的线程也不会马上得到锁,需要等到执行notify()的线程全部执行完毕【退出同步方法或代码块】时,才会释放锁。

3、 join()

作用:使线程对象x正常执行run()中的任务,同时令其主线程y阻塞,等待x销毁之后再继续执行y后面的程序。

join内部是通过wait()实现的等待

4、 ThreadLocal

作用:解决每个线程绑定自己的私有变量,即实现变量在不同线程间的隔离性,可以理解为全局存放数据的盒子,盒子中存储着每个线程的私有数据。

原理:基于map实现的,即ThreadLocal的内部类ThreadLocalMap。

简述ThreadLocal的get(): 

         通过ThreadLocal.ThreadLocalMap获取ThreadLocalMap<ThreadLocal,Object>,然后根据当前ThreadLocal获取当前线程的共享变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值