大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

Java多線程實例練習題答案

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

問題描述

啟動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多線程實例練習題答案”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲国产日韩在线一区 | 亚洲国产精品久久 | 九九99久久精品在免费线bt | 九九51精品国产免费看 | 国内精品亚洲 | 在线观看国产精品入口 | 国产精品永久免费视频 | 色资源站 | 奇米最新视频 | 久久草在线免费 | 四虎影视免费观看免费观看 | 女人18免费毛片视频 | 中文字幕精品一区 | 欧美亚洲综合另类型色妞 | 欧美成人亚洲欧美成人 | 囗交免费毛片 | 草莓视频在线观看精品最新 | 国产a免费 | 毛片免费视频播放 | 久久久999久久久精品 | 小h片在线播放 | 手机看片精品高清国产日韩 | 久久精品30 | 久久在线中文字幕 | 国产福利午夜自产拍视频在线 | 欧洲一级毛片免费 | 欧美高清视频www夜色资源 | 精品四虎免费观看国产高清 | 天天翘夜夜洗澡天天做 | 日韩精品免费一级视频 | 91大学生视频 | 日产国语一区二区三区在线看 | 高清一区二区三区 | 日韩欧美成人免费中文字幕 | 亚洲欧美一区二区久久 | 本道综合 | 国产激情小视频 | 亚洲欧美日韩国产精品网 | 波多野给衣一区二区三区 | 国产成人精品免费视频网页大全 | 亚洲欧洲一区二区 |