pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

詳解Java線程中常用操作

這篇文章主要為大家詳細介紹了一下Java線程中的一些常用操作,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,需要的可以參考一下

線程的常用操作

設置線程名字:setName()

獲取線程名稱:getName()

線程唯一Id:getId()

//?自定義線程名稱
String?threadName?=?"threadName";
//?構造方法方式
Thread?thread?=?new?Thread(()?->?{
????System.out.println("線程名="?+?Thread.currentThread().getName());
},threadName);
//?set方法方式
//?thread.setName(threadName);
System.out.println("線程唯一Id="?+?thread.getId());

線程啟動:start()

判斷線程是否存活:isAlive()

//?線程啟動
thread.start();
System.out.println("是否為存活線程="?+?thread.isAlive());

線程方法:run() /call()

線程啟動后會去調用的方法。線程要做什么就在run/call方法寫,不需要直接調用,線程啟動后自己會去調用run() /call()。如果程序沒有啟動線程直接調用run/call,那么就不屬于多線程編程,是屬于當前線程直接調用普通方法一樣。

獲取當前線程對象:currentThread()

操作當前線程的非static方法,得先拿到線程對象才可以

//?獲取當前線程對象
Thread?currentThread?=?Thread.currentThread();
//?對當前線程做一些操作
System.out.println(currentThread.getName());
try?{
????//?sleep?靜態(tài)方法則不需要
????Thread.sleep(1000);
}?catch?(InterruptedException?e)?{
????e.printStackTrace();
}

關于線程的狀態(tài)控制(生命周期)的操作可以參考上一篇文章。

守護線程(后臺線程)

普通線程(用戶線程)的守護者,守護線程的任務是為其他的線程提供服務。如果進程中沒有了用戶線程,那么守護線程也就沒有存在的意義,JVM也隨之結束。典型的守護線程有JVM的垃圾回收線程,操作系統(tǒng)的啟動也會啟動各種模塊的守護線程。

設置線程為守護線程:setDaeman()

注意:該方法必須在start() 方法之前調用

public?static?void?main(String[]?args)?{
????Thread?thread?=?new?Thread(()?->?{
????????System.out.println("線程名="+Thread.currentThread().getName());
????????try?{
????????????Thread.sleep(1000);
????????}?catch?(InterruptedException?e)?{
????????????e.printStackTrace();
????????}
????????//?這一句不會打印出來,因為main線程(目前唯一的普通線程)等待1秒后已經結束了
????????System.out.println("守護線程的狀態(tài)="?+?Thread.currentThread().getState());
????});
????//?守護線程
????thread.setDaemon(true);
????//?線程啟動
????thread.start();
????System.out.println("是否為守護線程="?+?thread.isDaemon());
}

線程串行化

執(zhí)行join() 方法的線程進入等待喚醒狀態(tài)(WAITING),直到調用該方法的線程結束后再由等待喚醒狀態(tài)轉為可運行狀態(tài)(RUNNABLE)。join() 方法是Thread類中的方法,其底層是使用wait() 方法來實現線程等待,待線程isAlive()為false 時才

實現線程的串行化:一個線程調用另一個線程對象的join() 來實現線程串行化執(zhí)行。

舉個例子:一道好菜

public?class?DemoCooking?{
????
????public?static?void?main(String[]?args)?{
????????Thread?mainThread?=?Thread.currentThread();
????????//?1.買菜
????????Thread?buyThread?=?new?Thread(new?CookingThread(mainThread,"買菜"),"buyThread");
????????//?2.洗菜
????????Thread?washThread?=?new?Thread(new?CookingThread(buyThread,"洗菜"),"washThread");
????????//?3.切菜
????????Thread?cutThread?=?new?Thread(new?CookingThread(washThread,"切菜"),"cutThread");
????????//?4.炒菜
????????Thread?scrambleThread?=?new?Thread(new?CookingThread(cutThread,"炒菜"),"scrambleThread");

????????//?不受線程啟動順序的影響
????????scrambleThread.start();
????????washThread.start();
????????cutThread.start();
????????buyThread.start();
????????
????????// main線程先執(zhí)行完才可以開始:買菜
????????System.out.println("開始準備……");
????}

????public?static?class?CookingThread?implements?Runnable{
????????private?final?Thread?thread;
????????private?final?String?job;

????????public?CookingThread(Thread?thread,?String?job){
????????????this.thread?=?thread;
????????????this.job?=?job;
????????}
????????@Override
????????public?void?run()?{
????????????String?name?=?Thread.currentThread().getName()+":";
????????????try?{
????????????????thread.join();

????????????????System.out.println(name?+?job?+?"開始");
????????????????Thread.sleep(1000);
????????????????System.out.println(name?+?job?+?"結束");
????????????????Thread.sleep(1000);?//?偷懶下
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????}
????}
}

執(zhí)行結果:main > buyThread > washThread > cutThread > scrambleThread > 結束

開始準備……
buyThread:買菜開始
buyThread:買菜結束
washThread:洗菜開始
washThread:洗菜結束
cutThread:切菜開始
cutThread:切菜結束
scrambleThread:炒菜開始
scrambleThread:炒菜結束

線程優(yōu)先級

設置當前線程的優(yōu)先級,線程優(yōu)先級越高,線程可能獲得執(zhí)行的次數越多,Java線程的優(yōu)先級用整數表示,優(yōu)先級的范圍為1-10,默認為5。

setPriority(int)方法:設置線程的優(yōu)先級。

getPriority方法:獲取線程的優(yōu)先級。

public?static?void?main(String[]?args)?{

????Thread?thread?=?new?Thread(()?->?{
????????System.out.println("線程1");
????});
????thread.setPriority(10);
????Thread?thread1?=?new?Thread(()?->?{
????????System.out.println("線程2");
????});
????thread1.setPriority(1);
????thread.start();
????thread1.start();

????System.out.println("線程默認的優(yōu)先級為="?+?Thread.currentThread().getPriority());

}

線程中斷

使用interrupt() 方法設置線程中斷標志=true,讓線程受到“阻塞”時拋出一個中斷信號。如果線程處于阻塞、等待喚醒或超時等待狀態(tài)(Object.wait, Thread.join和Thread.sleep)時,那么它將接收到一個中斷異常(InterruptedException),從而提前被結束該狀態(tài)。反之,如果線程是處于“可運行”(RUNNABLE)狀態(tài),那么中斷標志將沒有作用。

案例一:線程中斷有效

public?static?void?main(String[]?args)?{
????Thread?thread?=?new?Thread(()?->?{
????????System.out.println("線程1");
????????try?{
????????????//?鬧鐘1分鐘后響
????????????Thread.sleep(60000);
????????????System.out.println("鬧鐘響了");
????????}?catch?(InterruptedException?e)?{
????????????//?提前退出超時等待狀態(tài)
????????????System.out.println("發(fā)生異常,提前醒了,鬧鐘沒響手動關了");
????????}

????????System.out.println("繼續(xù)執(zhí)行該線程的后續(xù)程序……");

????});
????thread.setPriority(1);
????thread.start();
????thread.interrupt();
????System.out.println("main線程將thread?終端狀態(tài)設置為?"+thread.isInterrupted());
}

執(zhí)行結果:

main線程將thread 終端狀態(tài)設置為 true
線程1
發(fā)生異常,提前醒了,鬧鐘沒響手動關了
繼續(xù)執(zhí)行該線程的后續(xù)程序……

案例二:線程中斷無效

public?static?void?main(String[]?args)?{
????Thread?thread1?=?new?Thread(()?->?{
????????System.out.println("線程"?+?Thread.currentThread().getName());
????????while?(true)?{
????????????System.out.print(Thread.currentThread().getState()?+?"\t");
????????}
????});
????thread1.start();
????thread1.interrupt();
}

執(zhí)行結果:線程一直打印自己的狀態(tài)為RUNNABLE。

以上就是詳解Java線程中常用操作的詳細內容,更多關于Java線程操作的資料請關注html5模板網其它相關文章!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

主站蜘蛛池模板: 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 深圳诚暄fpc首页-柔性线路板,fpc柔性线路板打样生产厂家 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 我爱古诗词_古诗词名句赏析学习平台 | 屏蔽泵厂家,化工屏蔽泵_维修-淄博泵业 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 通风天窗,通风气楼,屋顶通风天窗,屋顶通风天窗公司 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | 潜水搅拌机-双曲面搅拌机-潜水推进器|奥伯尔环保 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 福建省教师资格证-福建教师资格证考试网| 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 电动葫芦-河北悍象起重机械有限公司| 空气能暖气片,暖气片厂家,山东暖气片,临沂暖气片-临沂永超暖通设备有限公司 | 北京四合院出租,北京四合院出售,北京平房买卖 - 顺益兴四合院 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 非甲烷总烃分析仪|环控百科 | 陕西华春网络科技股份有限公司| 鑫达滑石-辽宁鑫达滑石集团 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 沈阳楼承板_彩钢板_压型钢板厂家-辽宁中盛绿建钢品股份有限公司 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 铸铁平台,大理石平台专业生产厂家_河北-北重机械 | 巩义市科瑞仪器有限公司| 原色会计-合肥注册公司_合肥代理记账公司_营业执照代办 | 电动葫芦|手拉葫芦|环链电动葫芦|微型电动葫芦-北京市凌鹰起重机械有限公司 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 影视模板素材_原创专业影视实拍视频素材-8k像素素材网 |