第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

用互斥與同步的知識寫售票系統(tǒng)

我在run()方法里運(yùn)用了互斥與同步的知識,但無法實(shí)現(xiàn)三個線程售出五張票的功能,因?yàn)樵谑鄢鲆粡埰敝螅ㄍ瓿刹僮骱螅┳霾坏?strong>既能使線程不結(jié)束又能釋放鎖資源。

為了便于理解,我來解釋一下:

要求(實(shí)現(xiàn)的功能)是這樣的:三個窗口(線程)公平競爭五張票,哪些窗口可以售票,一個窗口可以售多少張票由系統(tǒng)決定,這意味著每次運(yùn)行的結(jié)果都不一樣。“希望線程不結(jié)束”是因?yàn)樵摼€程售出一張票后仍然有機(jī)會售票,“又能釋放鎖資源”是因?yàn)槠渌€程也可以售票。

以下是我的代碼,望大神賜教,不勝感激:

public class SoldTicketThread implements Runnable {

private int ticket=5;

Object lock=new Object();

public void run() {

synchronized(lock){

while(ticket<=0){

try {

lock.wait();

} catch (InterruptedException e) {

System.out.println("已售空,請等待");

}

}

/*while(ticket>0){

System.out.println(Thread.currentThread().getName()+

"賣出了一張票,剩余"+(--ticket)+"張票");

}*/

System.out.println(Thread.currentThread().getName()+

"賣出了一張票,剩余"+(--ticket)+"張票");

//Thread.yield();

lock.notifyAll();

}

}

}

在另一個文件(類)測試:

public class MainMenu {

public static void main(String[] args) {

SoldTicketThread window=new SoldTicketThread();

Thread wd1=new Thread(window,"窗口二");

Thread wd2=new Thread(window,"窗口一");

Thread wd3=new Thread(window,"窗口三");

wd1.start();

wd2.start();

wd3.start();

try {

wd1.join();

wd2.join();

wd3.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}


正在回答

3 回答

16年的帖子 19年的回答。。。

0 回復(fù) 有任何疑惑可以回復(fù)我~
class?MyThread2?implements?Runnable{
????private?int?ticketsCont?=?100;//一共5張火車票
????private?final?Object?lockObj?=?new?Object();

????@Override
????public?void?run()?{
????????while?(true){
????????????synchronized?(lockObj){
????????????????while?(ticketsCont<=0){
??????????????????System.out.println(Thread.currentThread().getName()+"沒票了");
????????????????????try?{
????????????????????????lockObj.wait();
????????????????????}?catch?(InterruptedException?e)?{
????????????????????????e.printStackTrace();
????????????????????}
????????????????}
????????????????ticketsCont--;????//如果還有票,就賣掉一張
????????????????System.out.println(Thread.currentThread().getName()+"賣了一張票,剩余票數(shù)為"+ticketsCont);
????????????????try?{
????????????????????Thread.sleep(500);
????????????????}?catch?(InterruptedException?e)?{
????????????????????e.printStackTrace();
????????????????}
????????????????lockObj.notifyAll();

????????????}
????????}


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

????????MyThread2?mt?=new?MyThread2();
????????//創(chuàng)建三個線程,模擬三個窗口賣票
????????Thread?th1?=?new?Thread(mt,"窗口1");
????????Thread?th2?=?new?Thread(mt,"窗口2");
????????Thread?th3?=?new?Thread(mt,"窗口3");
????????//啟動這三個線程
????????th1.start();
????????th2.start();
????????th3.start();

????}
}

運(yùn)行結(jié)果 我的可以實(shí)現(xiàn) 你可以參考一下? 有問題可以探討哈

窗口1賣了一張票,剩余票數(shù)為99
窗口1賣了一張票,剩余票數(shù)為98
窗口1賣了一張票,剩余票數(shù)為97
窗口1賣了一張票,剩余票數(shù)為96
窗口1賣了一張票,剩余票數(shù)為95
窗口1賣了一張票,剩余票數(shù)為94
窗口1賣了一張票,剩余票數(shù)為93
窗口1賣了一張票,剩余票數(shù)為92
窗口1賣了一張票,剩余票數(shù)為91
窗口1賣了一張票,剩余票數(shù)為90
窗口1賣了一張票,剩余票數(shù)為89
窗口1賣了一張票,剩余票數(shù)為88
窗口1賣了一張票,剩余票數(shù)為87
窗口1賣了一張票,剩余票數(shù)為86
窗口1賣了一張票,剩余票數(shù)為85
窗口1賣了一張票,剩余票數(shù)為84
窗口3賣了一張票,剩余票數(shù)為83
窗口3賣了一張票,剩余票數(shù)為82
窗口3賣了一張票,剩余票數(shù)為81
窗口2賣了一張票,剩余票數(shù)為80
窗口2賣了一張票,剩余票數(shù)為79
窗口2賣了一張票,剩余票數(shù)為78
窗口2賣了一張票,剩余票數(shù)為77
窗口3賣了一張票,剩余票數(shù)為76
窗口3賣了一張票,剩余票數(shù)為75
窗口3賣了一張票,剩余票數(shù)為74
窗口3賣了一張票,剩余票數(shù)為73
窗口3賣了一張票,剩余票數(shù)為72
窗口3賣了一張票,剩余票數(shù)為71
窗口3賣了一張票,剩余票數(shù)為70
窗口3賣了一張票,剩余票數(shù)為69
窗口3賣了一張票,剩余票數(shù)為68
窗口3賣了一張票,剩余票數(shù)為67
窗口3賣了一張票,剩余票數(shù)為66
窗口3賣了一張票,剩余票數(shù)為65
窗口3賣了一張票,剩余票數(shù)為64
窗口3賣了一張票,剩余票數(shù)為63
窗口3賣了一張票,剩余票數(shù)為62
窗口3賣了一張票,剩余票數(shù)為61
窗口1賣了一張票,剩余票數(shù)為60
窗口1賣了一張票,剩余票數(shù)為59
窗口1賣了一張票,剩余票數(shù)為58
窗口1賣了一張票,剩余票數(shù)為57
窗口1賣了一張票,剩余票數(shù)為56
窗口1賣了一張票,剩余票數(shù)為55
窗口1賣了一張票,剩余票數(shù)為54
窗口1賣了一張票,剩余票數(shù)為53
窗口1賣了一張票,剩余票數(shù)為52
窗口1賣了一張票,剩余票數(shù)為51
窗口1賣了一張票,剩余票數(shù)為50
窗口1賣了一張票,剩余票數(shù)為49
窗口1賣了一張票,剩余票數(shù)為48
窗口1賣了一張票,剩余票數(shù)為47
窗口1賣了一張票,剩余票數(shù)為46
窗口1賣了一張票,剩余票數(shù)為45
窗口1賣了一張票,剩余票數(shù)為44
窗口1賣了一張票,剩余票數(shù)為43
窗口1賣了一張票,剩余票數(shù)為42
窗口3賣了一張票,剩余票數(shù)為41
窗口2賣了一張票,剩余票數(shù)為40
窗口2賣了一張票,剩余票數(shù)為39
窗口2賣了一張票,剩余票數(shù)為38
窗口2賣了一張票,剩余票數(shù)為37
窗口2賣了一張票,剩余票數(shù)為36
窗口2賣了一張票,剩余票數(shù)為35
窗口2賣了一張票,剩余票數(shù)為34
窗口2賣了一張票,剩余票數(shù)為33
窗口2賣了一張票,剩余票數(shù)為32
窗口2賣了一張票,剩余票數(shù)為31
窗口2賣了一張票,剩余票數(shù)為30
窗口3賣了一張票,剩余票數(shù)為29
窗口3賣了一張票,剩余票數(shù)為28
窗口3賣了一張票,剩余票數(shù)為27
窗口3賣了一張票,剩余票數(shù)為26
窗口3賣了一張票,剩余票數(shù)為25
窗口1賣了一張票,剩余票數(shù)為24
窗口1賣了一張票,剩余票數(shù)為23
窗口1賣了一張票,剩余票數(shù)為22
窗口1賣了一張票,剩余票數(shù)為21
窗口1賣了一張票,剩余票數(shù)為20
窗口1賣了一張票,剩余票數(shù)為19
窗口1賣了一張票,剩余票數(shù)為18
窗口1賣了一張票,剩余票數(shù)為17
窗口3賣了一張票,剩余票數(shù)為16
窗口3賣了一張票,剩余票數(shù)為15
窗口3賣了一張票,剩余票數(shù)為14
窗口3賣了一張票,剩余票數(shù)為13
窗口3賣了一張票,剩余票數(shù)為12
窗口3賣了一張票,剩余票數(shù)為11
窗口2賣了一張票,剩余票數(shù)為10
窗口3賣了一張票,剩余票數(shù)為9
窗口3賣了一張票,剩余票數(shù)為8
窗口3賣了一張票,剩余票數(shù)為7
窗口3賣了一張票,剩余票數(shù)為6
窗口3賣了一張票,剩余票數(shù)為5
窗口3賣了一張票,剩余票數(shù)為4
窗口3賣了一張票,剩余票數(shù)為3
窗口3賣了一張票,剩余票數(shù)為2
窗口3賣了一張票,剩余票數(shù)為1
窗口3賣了一張票,剩余票數(shù)為0
窗口3沒票了
窗口1沒票了
窗口2沒票了
0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

毒打妻兒田教授

有問題多多探討。
2019-10-10 回復(fù) 有任何疑惑可以回復(fù)我~

你每個線程只執(zhí)行了一次呀思密達(dá)。你的關(guān)注點(diǎn)只落在鎖上了,忽略了每個線程要去循環(huán)執(zhí)行呀。

public void run() {

while(true){

synchronized(lock){

while(ticket<=0){

System.out.println(Thread.currentThread().getName()+

"while剩余"+ticket+"張票");

try {

lock.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


}

System.out.println(Thread.currentThread().getName()+

"賣出了一張票,剩余"+(--ticket)+"張票");

lock.notifyAll();

}

}

}


0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

用互斥與同步的知識寫售票系統(tǒng)

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號