黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java多線程實例練習題答案

Java多線程實例練習題答案

更新時間:2020-08-13 16:35:51 來源:動力節點 瀏覽2520次

問題描述

啟動3個線程打印遞增的數字,線程1先打印1,2,3,4,5,然后是線程2打印6,7,8,9,10,然后是線程3打印11,12,13,14,15.接著再由線程1打印16,17,18,19,20….以此類推,直到打印到75.程序的輸出結果應該為:

線程1:1

線程1:2

線程1:3

線程1:4

線程1:5

線程2:6

線程2:7

線程2:8

線程2:9

線程2:10

線程3:71

線程3:72

線程3:73

線程3:74

線程3:75

解法一:

class?PrintRunnable?implements?Runnable?{

????private?static?volatile?int?printNum?=?0;
????private?int?threadId;
????private?Object?o;
????public?PrintRunnable(int?threadId,Object?o){
????????this.threadId?=?threadId;
????????this.o=o;
????}
????@Override
????public?void?run()?{
????????while(printNum?<?75){
????????????synchronized?(o){
????????????????if?(printNum/5%3?+?1?==?threadId){
????????????????//該判斷確保對應線程輸出
????????????????????for?(int?i?=?0;?i?<5;?i++)?{
????????????????????????System.out.println("線程"+threadId+":"+(++printNum));
????????????????????}
????????????????????o.notifyAll();
????????????????}else?{
????????????????????try?{
????????????????????????o.wait();
????????????????????}?catch?(InterruptedException?e)?{
????????????????????????e.printStackTrace();
????????????????????}
????????????????}

????????????}
????????}
????}
}
public?class?Main?{
????public?static?void?main(String[]?args)?throws?InterruptedException?{
????????Object?o?=?new?Object();
????????new?Thread(new?PrintRunnable(1,o)).start();
????????new?Thread(new?PrintRunnable(2,o)).start();
????????new?Thread(new?PrintRunnable(3,o)).start();
????}
}

解法二:

public?class?Print123456?implements?Runnable{
????private?String?name;
????private?Object?prev;
????private?Object?self;
????private?int?count;
????public?Print123456(String?name,Object?prev,Object?self,int?count){
????????this.name=name;
????????this.prev=prev;
????????this.self=self;
????????this.count=count;
????}
????@Override
????public?void?run()?{
????????while(count<=75){
????????????synchronized?(prev){
????????????????synchronized?(self){
????????????????????for?(int?i=0;i<5;i++){
????????????????????????count=count+1;
????????????????????????if(count>75)break;
????????????????????????System.out.println(name+":?"+count);

????????????????????}
????????????????????count=count+10;
????????????????????//System.out.println("釋放自身鎖,并喚醒在等待該鎖的線程");
????????????????????self.notify();//釋放自身鎖,并喚醒在等待該鎖的線程

????????????????}
????????????????//System.out.println("釋放自身鎖成功");
????????????????try?{
????????????????????//System.out.println("等待前一個鎖");
????????????????????prev.wait();//等待前一個鎖

????????????????}?catch?(InterruptedException?e)?{
????????????????????e.printStackTrace();
????????????????}
????????????}
????????????//System.out.println("兩個鎖全部釋放,重新進入新的循環,但是由于有prev.wait()所以該線程等待獲取prev的鎖");
????????}
????}
}
public?class?Main?{
????public?static?void?main(String[]?args)?throws?InterruptedException?{
????????Object?a=new?Object();
????????Object?b=new?Object();
????????Object?c=new?Object();
????????Print123456?A=new?Print123456("線程1",c,a,0);
????????Print123456?B=new?Print123456("線程2",a,b,5);
????????Print123456?C=new?Print123456("線程3",b,c,10);
????????new?Thread(A).start();
????????Thread.sleep(100);
????????new?Thread(B).start();
????????Thread.sleep(100);
????????new?Thread(C).start();
????????Thread.sleep(100);
????}
}

以上就是動力節點java培訓機構的小編針對“Java多線程實例練習題答案”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 97色在线观看免费视频 | 黄片毛片免费 | 天天综合天天看夜夜添狠狠玩 | 香蕉视频97| 日本免费全黄一级裸片视频 | 一级女人18片毛片免费视频 | 五月婷婷在线播放 | 瑟瑟网站免费 | 一卡二卡3卡四卡网站精品国 | 欧美日韩国产片 | 成年人免费在线视频 | 好男人社区成人影院在线观看 | 日韩精品视频一区二区三区 | 成人9久久国产精品品 | 拔擦拔擦8x高清在线 | 久久精品久久精品国产大片 | 精品国产91久久久久久久 | 三级经典三级日本三级欧美 | 免费看a级 | 中文字幕丝袜在线56页 | 免费一级毛片在线播放 | 高清国产亚洲va精品 | 日本黄色www| 一二三区乱码一区二区三区码 | 久久久无码精品亚洲日韩按摩 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 黄色网址免费观看 | 国产91精品久久久久久久 | 911精品国产亚洲日本美国韩国 | 91视频看 | 手机看片1024久久精品你懂的 | 国内精品区一区二区三 | 黄色大片在线免费看 | 狠狠狠 | 日韩成人国产精品视频 | 2020久久精品亚洲热综合一本 | 国产在线视频www片 国产在线日韩在线 | 久久第一页 | 狠狠欧美 | 日日干日日操 | 亚洲第一a|