本帖最后由 小康康 于 2012-9-27 13:19 编辑
对于线程这块儿自己之前也有些疑惑,之前也有朋友询问过,现在自己总结一下,给需要的朋友。
1、 线程间通讯:就是多个人线程操作同一个资源。比如
输入煤和输出煤,操作的都是煤炭资源;隶属于两个线程,由于CPU有切换,所以会导致输入的煤对象和输出的煤对象不一样的情况。①解决方式一:加上锁,来解决不变性的问题。即input
中的run()加锁; output 中的 run()加锁 ;答案:不能解决问题,因为分别属于两个线程,不属于同一个锁。所以只能用唯一的对象resource作为参数进行传递。②解决方式二:使用等待唤醒机制,来解决间隔输出,就是你放入一个数据,我取出一个数据。
2、多线程通讯时非常重要的机制——等待唤醒机制 ①
wait() :让线程处于冻结状态,被wait的线程会被存储到线程池中。 ② notify() :
唤醒线程池中任意一个线程。 ③ notiry() : 唤醒线程池中所有线程。注意:这些方法都必须定义在同步中。因为这些方法是用于操作线程状态的方法,必须要明确到底操作的是哪个锁上的线程。即 一个锁中的等待和唤醒
不影响
另一个锁中的等待和唤醒。
|