第三章:线程间的通信
Wait()方法:线程放弃锁,进入等待状态;
Notify()方法:唤起任意一个等待的线程,只唤起一个,而且是随机的。
NotifyAll()方法:唤起所有等待的线程,这些线程,争抢(锁)运行的权利;当调用notify()方法时,当前正在执行的线程并不会马上释放锁,而是要等带当前的同步代码块执行完毕才释放持有的锁。
当线程程wait方法状态的时候,调用interrupt()时,会产生InterruptedException();
如果通知方法过早的调用wait()方法就没有执行的必要了。
线程之间可以通过管道进行通信:
字节流:PipedInutStream和PipedOutputStream
字符流:PipedReader和PipeWriter
将连个管道接通:inputStream。Connect(outputStream)
Join()方法:的作用是使所属线程对象正常执行run()方法中的任务,而使当前线程进行无限期的阻塞,直到之前的线程销毁后再继续执行当前线程。
Join(long )与sleep(long)的区别:
Join()方法在内部是使用wait()方法来实现的,所以具有释放锁的特点,
Sleep()方法不会释放锁;
ThreadLocal的使用:
变量值得共享可以使用public static的变量形式,所有线程都使用同一个变量,但是如果想实现每一个线程都有自己的共享变量该如何解决:使用ThreadLocal类。可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每一个线程的私有数据。
ThreadLocal ti = new ThreadLocal();t1.set(“sdsds”),设置值,获得值用:t1.get();
当第一次调用get时会返回一个null值,但是如果希望返回的不是null:则需要继承ThreadLocal类并实现其initialValue()方法,返回你想要返回的值。