Day14 多线程通讯
Day14
多线程
线程间通讯
多个线程在处理同一资源,但是任务却不同。
等待唤醒机制
涉及方法
- wait(): 让线程处于冻结状态,被wait的线程会被存储到线程池中。
- notify():唤醒线程池中一个线程(任意)。
- notifyAll():唤醒线程池中所有线程。
这些方法必须放进同步代码块中,以标识所属的锁。
Lock接口
存在于java.util.concurrent.locks.*中。
把锁封装成了对象,用于替代synchronized系列。
- Lock的构造函数:ReentrantLock()
- lock()开始锁 lock()关闭锁
形式为
''lock.lock();
''code...
''lock.lock();
Condition接口
存在于java.util.concurrent.locks.*中。
把object监视器封装成了对象,替代原来的wait、notify、notifyAll。
wait和sleep的区别
- wait可以指定时间也可以不指定;
sleep必须指定时间。 - wait是Object方法,sleep是Thread方法
- 在同步中时,对cpu执行权和锁的处理不同。
wait释放执行权,释放锁。
sleep释放执行权,不释放锁。
停止线程的方法
- stop方法
- run方法结束。run任务中都会有循环结构,只要控制循环,就可以结束任务。
interrupt()
- 会让线程从冻结状态强制恢复到运行状态中来,使其获得cpu执行资格。
- 强制动作发生时会产生InterruptedException,要记得处理。
setDaemon()
- 设定守护线程(后台线程)。
- 只剩后台线程的时候,JVM就会关闭。
join()
- 用于临时加入一个线程,主线程要等待该线程执行完才能执行。
- threadname.join();
setPriority()
- threadname.setPRiority(Thread.MAX_PRIORITY);
- 为某个线程设定优先级。
浙公网安备 33010602011771号