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获取当前线程的共享变量。