《java多线程编程核心技术》读书笔记3:线程间的通信

第三章:线程间的通信

 

Wait()方法:线程放弃锁,进入等待状态;

Notify()方法:唤起任意一个等待的线程,只唤起一个,而且是随机的。

NotifyAll()方法:唤起所有等待的线程,这些线程,争抢(锁)运行的权利;当调用notify()方法时,当前正在执行的线程并不会马上释放锁,而是要等带当前的同步代码块执行完毕才释放持有的锁。

 

当线程程wait方法状态的时候,调用interrupt()时,会产生InterruptedException();

 

如果通知方法过早的调用wait()方法就没有执行的必要了。

 

 

线程之间可以通过管道进行通信:

字节流:PipedInutStreamPipedOutputStream

字符流:PipedReaderPipeWriter

将连个管道接通:inputStreamConnect(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()方法,返回你想要返回的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章