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

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

用互斥與同步知識寫售票系統(tǒng)(最后一節(jié)視頻有要求)

我在run()方法里運用了互斥與同步的知識,但無法實現(xiàn)三個線程售出五張票的功能,因為在售出一張票之后(完成操作后)做不到既能使線程不結(jié)束又能釋放鎖資源。

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

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

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

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();

}


}

}


正在回答

1 回答

public class SoldTicketThread implements Runnable {

private int ticket = 5;


private synchronized void sale() {

if (ticket > 0) {

System.out.println(Thread.currentThread().getName() + "賣出了一張票,剩余"

+ (--ticket) + "張票");

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}


public void run() {

while (ticket > 0) {

sale();

// 這里要確保進入賣票環(huán)節(jié)前就把資源鎖住

}

}


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();

}

}

你本身的邏輯就出錯了,賣票的操作肯定要在循環(huán)體里面,而且要鎖定的內(nèi)容是整個賣票過程的操作。


1 回復 有任何疑惑可以回復我~
#1

慕粉3687206 提問者

好給力,非常感謝!
2016-07-31 回復 有任何疑惑可以回復我~
#2

慕粉3687206 提問者

看了你的代碼,頓時明白問題所在,在實現(xiàn)的邏輯上確實有問題,謝謝
2016-07-31 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

用互斥與同步知識寫售票系統(tǒng)(最后一節(jié)視頻有要求)

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

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

幫助反饋 APP下載

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

公眾號

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