---------------------- ASP.Net+Android+IOS开发 、 .Net培训 期待与您交流! ----------------------
1. 线程间通信:多个线程处理同一资源,但是任务却不同
2. 等待唤醒机制涉及的方法
wait()方法:让线程处于冻结状态,这时的线程会释放cpu的执行权和执行资格。被wait的线程会被存储到线程池中
notify()方法:唤醒线程池中的一个线程(任意)
notifyAll()方法:唤醒线程池中的所有线程
注意:
(1)这些方法都必须定义在同步中
因为这些方法是用于操作线程状态的方法
(2)必须要明确到底操作的是哪个锁上的线程
3. 为什么操作线程的方法wait notify notifyAll定义在了Object类中
因为这些方法是监视器的方法,监视器其实就是锁,锁可以是任意的对象,任意对象调用的方法一定定义在Object类中
4. 同步代码块:对于锁的操作是隐式的
5. jdk1.5以后将同步和锁封装成了对象,并将操作锁的隐式方式定义到了该对象中,将隐式动作变成了显示动作
6. lock位于java.util.concurrent.locks包中
7. ReentrantLock是实现了lock接口的子类
8. 一个锁上只能有一组监视器,这组监视器即监视生产者又监视消费者,这组监视器能将生产者和消费者全都wait,也能将生产者和消费者全都唤醒。
解决以上问题的办法是:创建2组监视器,分别用于监视生产者和消费者
9. Lock接口和Condition接口的区别
Lock接口:替代了同步代码块或同步函数。将同步的隐式锁操作变成现实锁操作。同时更为灵活,可以一个锁上加上多组监视器。
lock():获取锁
unlock():释放锁,通常需要定义在finally代码块中
Condition接口:替代了Object中的wait notify notifyAll方法
将这些监视器方法单独进行了封装,变成Condition监视器对象,可以和任意锁进行组合。
Condition中的方法:
await(); signal(); signalAll();
10. 在同步代码块中只能有一个线程执行
11. wait和sleep的区别
(1) wait可以指定时间也可以不指定时间;sleep必须指定时间
(2) 在同步中时,对cpu的执行权和锁的处理不同
wait:释放执行权,释放锁
sleep:释放执行权,不释放锁
12. interrupt:让线程的冻结状态清除掉,让线程恢复到具备cpu执行资格的状态
---------------------- ASP.Net+Android+IOS开发 、 .Net培训 期待与您交流! ----------------------
详细请查看:http://edu.csdn.net