一、使用wait/notify实现线程间通信
> wait/notify
1. 方法wait(),它是Object类的方法,此方法只能在同步方法,或者同步代码中调用,调用后,释放锁,
2. notify(),它是Object类的方法,方法也要在同步方法或者同步代码中使用,在调用钱,线程必须获得该对象的对象级别锁,如果有多个线程处于wait()状态,择优线程规划器随机挑出一个处于等待状态的线程,对它进行唤醒,需要注意的是,notify()方法执行后,处于等待状态的线程并不是立即获取锁,需要等待notify()的线程将当前代码执行完毕之后才释放锁
3. 当线程 处于wait()方法,调用线程对象的interrupt()方法会出现InterruptedException异常
4. wait(long),超过long这一时间,会自动对线程进行唤醒
二、方法join的使用
> join方法
1. join()方法作用:是所属线程对象x正常执行run()方法中的任务,而使当前线程z进行无限期的阻塞,等待x线程销毁后,在执行线程z后边的代码,join()方法内部使用的wait()方法,同步原理与synchorized不同。
2. join()方法与interrupt()方法遇到,会发生异常,
3. join(long),参数是设定等待时间
4. join(long),会释放锁,内部调用wait(),sleep(long),不释放锁
三、ThreadLocal的使用
1. ThreadLocal作用:每个线程绑定自己的值
2. 解决变量在不同线程间的隔离性,也就是不同线程拥有自己的值