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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 免费色片网站 | 久热国产在线视频 | 奇米影视狠狠干 | 深夜a | 日本二区在线观看 | 欧美一级毛片免费播放aa | 日韩欧美高清在线观看 | 亚洲精品亚洲九十七页 | 亚洲女人国产香蕉久久精品 | 久久午夜夜伦伦鲁鲁片 | 久久中文精品 | 日韩一区二区在线视频 | 日本一区二区高清 | 久久久久久久久综合影视网 | 激情开心婷婷 | 天天爽夜夜爽人人爽 | 天天操夜夜摸 | 淫视频网站 | 大色香蕉色视频大全 | 欧美成人精品不卡视频在线观看 | 桃色视频在线观看 | 亚洲欧美另类久久久精品能播放的 | 免费视频性 | 欧美日韩一区二区综合在线视频 | 日本又黄又爽又色的免费视频 | 国产经典自拍 | 最新国产午夜精品视频成人 | 欧美亚洲综合另类成人 | 99亚洲精品| 欧美xxx精品| 一区二区三区在线视频播放 | 欧美一欧美一区二三区性 | 草久在线观看 | 看黄色免费网站 | 深夜影院老司机69影院 | 久久国产综合精品欧美 | 欧美超级碰碰 | 久久精品国产影库免费看 | 日本高清免费不卡毛片 | 日韩一级欧美一级毛片在 | 国产网站精品 |