1)方法wait的做用是使当前执行代码的线程进行等待,将当前线程置入预执行队列,而且在wait所在代码行处中止执行,直到接到通知或者中断。在wait以前,要得到一个对象锁,即wait只能在同步方法/块中使用,执行wait以后当即释放锁。wait状态不能被interrupt,会抛异常。线程
2)notify随机唤醒等待队列中等待同一共享资源的线程。notify也要得到一个对象锁,即notify也只能在同步方法/块中使用,执行notify以后,线程继续执行后面的代码,直到所有完成,才会释放锁。以后由线程规划器挑出一个等待状态的线程对其发出notify,并使其得到对象锁,让其执行wait以后的语句,再释放掉锁。对象
3)notifyAll唤醒全部等待的线程队列
4)wait(long)等待某一个时间内是否有线程对锁进行唤醒,若是超过这个时间就自动唤醒ip
5)生产者、消费者模式原来都是基于wait/notify原理资源
6)管道流pipeStream是一种特殊的流,用于在不一样线程间直接传送数据。一个线程发送数据到输出管道,另外一个线程从输入管道中读数据,经过使用管道,实现不一样线程间的通讯。Java提供了四个类来使线程间进行通讯:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter。使用方法:在外部定义一个PipedInputStream和一个PipedOutputStream,而后让PipedOutputStream链接(connect)PipedInputStream,而后将这两个流分别给到输入数据和输出数据的线程,两个线程之间就能够传输字节或者字符流了get
7)join的做用是等待线程对象销毁。主线程建立子线程,若子线程耗时严重,主线程将会先于子线程完成。这时若是主线程想等待子线程执行完成以后再结束,好比获取子线程处理完成的数据,这时就用到了join。主线程启动子线程a,而后a.join就会一直阻塞在那,直到a运行完成同步
8)线程join时不能被interrupt,会抛异常;join(long)设置等待时间,结束后也会释放锁(但sleep不会释放锁)it
9)ThreadLocal解决的是每一个线程绑定本身的值,每一个线程均可以执行ThreadLocal.set(object)将本身的值放入,再经过get()获取本身的值。ThreadLocal解决的是变量在不一样线程间的隔离性,也就是不一样线程拥有本身的值。pip