Java多線程實例練習(xí)題答案

Java多線程實例練習(xí)題答案

北大青鳥長沙麓谷校區(qū)      2022-04-04 22:07:01     6

Java多線程實例練習(xí)題答案,問題描述啟動3個線程打印遞增的數(shù)字,線程1先打印1,2,3,4,5,然后是線程2打印6,7,8,9,10,然后是線程3打印11,12,13,14,15.接著再由

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細(xì)介紹

問題描述

啟動3個線程打印遞增的數(shù)字,線程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.程序的輸出結(jié)果應(yīng)該為:

線程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){????????????????//該判斷確保對應(yīng)線程輸出????????????????????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("兩個鎖全部釋放,重新進(jìn)入新的循環(huán),但是由于有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);????}}

以上就是北大青鳥長沙麓谷校區(qū)java培訓(xùn)機(jī)構(gòu)的小編針對“Java多線程實例練習(xí)題答案”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹(jǐn)防上當(dāng)。