概述
线程间通讯
多个线程在处理同一资源,但是任务却不同。
sleep()
**等待唤醒机制
涉及的方法:
(1)wait(); 让线程处于冻结状态,被wait的线程会被存储在线程池中。
(2)notify(); 用于唤醒线程池中的一个线程(任意没顺序)。
(3)notifyall(); 用于唤醒线程池中所有线程。
这些方法都必须定义在同步中(synchronized),因为这些方法是用于操作线程状态的方法。必须要明确到底操作的是哪个锁上的线程。
————————————————————————————————————————————————————
多生产者,多消费者
————————————————————————————————————————————————————
LOCK 接口
Lock.lock = new ReentrantLock();
JDK1.5以后将同步和锁封装成了对象,并将操作锁的隐式变成了显示动作。
Lock替代了同步(synchronized)代码块或者同步函数。将同步的隐式操作变成显示锁操作。
lock(); 获取锁
unlock(); 释放锁,通常需要定义finally代码块中。
Condition替代了Object里面的wait(); notify(); notifyall(); 方法。将这些监视器方法单独进行封装,变成Condition监视器对象。可以任意锁进行组合。
可以创建一个锁,获取两组监视器,一组监视生产者,一组监视消费者
————————————————————————————
wait 和 sleep的区别
1/ wait可以指定时间,也可以不指定。Sleep必须指定时间。
2/ 在同步中时,对于CPU的执行权和锁的处理不同:
wait: 释放执行权,释放锁。
sleep:释放执行权,不释放锁。
——————————————————————————————————————————————
线程停止方式:
stop();方法
run(); 方法
任务重都会有循环结构,只要控制住循环就可以结束任务。
定义标记
控制循环通常就用定义标记来完成。
但是如果线程处于了冻结状态,无法读取标记。就使用——interrupt()
可以使用interrupt()方法将线程从冻结状态强制回复到运行状态中来,让线程具备CPU的执行资格。
但是强制动作会发生了InterruptException,需要处理。
——————————————————————————
setDaemon方法——守护线程(后台线程)
前台线程存在就存在,如果前台线程都结束了,后台线程无论处于何种状态都会结束。
——————————————————————
join 方法
临时加入一个线程运算时可以使用join方法,会等待调用join方法的线程执行完再执行。
最后
以上就是含蓄母鸡为你收集整理的(19)Java学习笔记——多线程02的全部内容,希望文章能够帮你解决(19)Java学习笔记——多线程02所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复