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