电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java多線程基礎(chǔ) 線程的等待與喚醒

瀏覽:67日期:2022-09-05 14:18:41

題圖:花啡,豆是買咖啡機(jī)送的,花是上周陽(yáng)朔旅游買的桂花,給它起了個(gè)名字,叫 Sunday。

咖啡味淡了一點(diǎn)點(diǎn),多了一份桂花的清香。

本篇我們來(lái)研究一下 wait() notify() notifyAll() 。

DEMO1: wait() 與 notify()

public class Test { static class ThreadOne extends Thread {private Callback mCallback;@Overridepublic void run() { work(); if (mCallback != null) {mCallback.onResult(false); }}// 耗時(shí) 3sprivate void work() { System.out.println(' 正在查詢數(shù)據(jù)庫(kù) 1'); long startTime = System.currentTimeMillis(); while (true) {if (System.currentTimeMillis() - startTime < 3000) { continue;}break; }}public void setCallback(Callback callback) { mCallback = callback;}public interface Callback { void onResult(boolean result);} } static class ThreadTest extends Thread {private Object mLock = new Object();private ThreadOne mThreadOne;@Overridepublic void run() { workOne(); System.out.println(' 根據(jù)結(jié)果繼續(xù)做其他事情 ');}private void workOne() { mThreadOne = new ThreadOne(); mThreadOne.setCallback(new ThreadOne.Callback() {@Overridepublic void onResult(boolean result) { System.out.println(' 查詢數(shù)據(jù)庫(kù) 1 結(jié)束,:' + (result ? ' 有數(shù)據(jù) ' : ' 無(wú)數(shù)據(jù) ')); synchronized (mLock) {mLock.notify();System.out.println('--ThreadTest 結(jié)束等待 --'); }} }); mThreadOne.start(); try {synchronized (mLock) { System.out.println('--ThreadTest 進(jìn)入等待 --'); mLock.wait();} } catch (InterruptedException e) {e.printStackTrace(); }} } public static void main(String[] var0) {ThreadTest threadTest = new ThreadTest();threadTest.start(); }}

DEMO1 輸出:

--ThreadTest 進(jìn)入等待--正在查詢數(shù)據(jù)庫(kù) 1查詢數(shù)據(jù)庫(kù) 1 結(jié)束,: 無(wú)數(shù)據(jù)--ThreadTest 結(jié)束等待--根據(jù)結(jié)果繼續(xù)做其他事情

注意:

使用 wait() 和 notify() 必須在獲得同步鎖后才能調(diào)用,若直接調(diào)用會(huì)報(bào) java.lang.IllegalMonitorStateException 錯(cuò)誤,因?yàn)闋顟B(tài)由同步鎖保護(hù)。

wait() 不同于 sleep() 的是 wait() 會(huì)釋放同步鎖。

因?yàn)?wait() 和 notify() 是基于同步鎖實(shí)現(xiàn)的,每個(gè)對(duì)象都有自己的同步鎖,所以 wait() 和 notify() 是 Object 的方法,而不是 Thread。

DEMO2,wait() 與 notifyAll():

public class Test { private static Object mLock = new Object(); static class MyThread extends Thread {String mName;Callback mCallback;public MyThread(String name){ mName = name;}@Overridepublic void run() { work(); if (mCallback != null) {mCallback.onResult(false); }}// 耗時(shí) 3sprivate void work() { System.out.println(mName + ' 等待 '); try {synchronized (mLock) { mLock.wait();} } catch (InterruptedException e) {e.printStackTrace(); }}public void setCallback(Callback callback) { mCallback = callback;}public interface Callback { void onResult(boolean result);} } static class ThreadTest extends Thread {@Overridepublic void run() { work('db1'); work('db2'); work('db3'); try {sleep(2000); } catch (InterruptedException e) {e.printStackTrace(); } synchronized (mLock) {System.out.println(' 喚醒全部 ');mLock.notifyAll(); }}private void work(String name) { final MyThread myThread = new MyThread(name); myThread.setCallback(new MyThread.Callback() {@Overridepublic void onResult(boolean result) { System.out.println(myThread.mName + ' 回來(lái)了 ');} }); myThread.start();} } public static void main(String[] var0) {ThreadTest threadTest = new ThreadTest();threadTest.start(); }}

DEMO2 輸出:

db1 等待db3 等待db2 等待喚醒全部db3 回來(lái)了db1 回來(lái)了db2 回來(lái)了

同一個(gè)對(duì)象的 wait() 方法可多次在不同的線程中調(diào)用,可讓不同的線程進(jìn)入等待(阻塞),可以一個(gè)一個(gè) notify(),也可以調(diào)用 notifyAll() 一次性全部喚醒。

來(lái)自:http://hackeris.me/2017/05/07/thread_base_1/

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 复盛空压机配件-空气压缩机-复盛空压机(华北)总代理 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 北京公司注册_代理记账_代办商标注册工商执照-企力宝 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 全自动面膜机_面膜折叠机价格_面膜灌装机定制_高速折棉机厂家-深圳市益豪科技有限公司 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | 氧化铁红厂家-淄博宗昂化工 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 润滑油加盟_润滑油厂家_润滑油品牌-深圳市沃丹润滑科技有限公司 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 凝胶成像仪,化学发光凝胶成像系统,凝胶成像分析系统-上海培清科技有限公司 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 实木家具_实木家具定制_全屋定制_美式家具_圣蒂斯堡官网 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 酸度计_PH计_特斯拉计-西安云仪 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 汕头市盛大文化传播有限公司,www.11400.cc | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 成都茶楼装修公司 - 会所设计/KTV装修 - 成都朗煜装饰公司 | 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 |