1.等待唤醒机制
涉及的方法:wait(),notify(),notifyAll() 这些方法都必须定义在同步中,明确自己操作的是哪个锁上的线程。
如 r.wait(),r 为同步的锁。
2.多生产者多消费者问题
见 ProducerConsumerDemo.java
3.同步代码块,对于锁的操作是隐式的,而新版本中有Lock,jdk1.5以后将同步和锁封装成对象,并将操作锁的隐式方法定义到了该对象中。
Lock接口:替代了同步代码块或同步函数synchronized的使用,可以一个锁上加上多组监视器。
Condition接口:替代了Object中的wait(),notify(),notifyAll方法,将其进行了封装,变成condition监视器对象,可以任意锁进行组合。
Lock lock = new ReentrantLock;//新建互斥锁
lock.lock(); //获取锁
lock.unlock(); //释放锁
Condition producer_con = lock.newCondition();
producer_con.await();
consumer_con.signal();
4.
wait和sleep区别:
wait可以指定时间也可以不指定,sleep必须指定时间;在同步中时,对cpu的执行权和锁的处理不同,wait释放执行权,释放锁,sleep释放执行权,不释放锁。
5.停止线程:stop方法(已过时,不安全)run方法结束
任务中都会有循环结构,只要控制住循环就可以结束任务,用定义标记
private boolen flag=true;
while(flag){}
public void setflag(){flag=flase;}
如果线程处于冻结状态,无法读取状态,此时用interrupt()方法将线程从冻结状态强制恢复到运行状态,让线程具备cpu执行资格,但是强制动作会发生InterruptedException,记得要处理,如将标记改为flase。
6.守护线程(后台线程),setDaemon(),在开启线程前使用。当所有前台线程结束时,后台线程自动结束。