加上static, synchronized 關鍵字呢??
如果用static 修飾車票的數(shù)量,然后在在車票減少的地方加上synchronized可以嗎?
public class Ticket extends Thread {
private static int tickets = 5;
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (tickets > 0) {
synchronized (this) {
tickets--;
System.out.println(Thread.currentThread().getName() + " has " + tickets + " tickets left!");
}
Thread.yield();
}
}
}
個人親測不行,但是不知道問題在哪?敬求指教!??!
2018-09-20
若夢厲害,說的對。
2018-08-07
synchronized的使用有問題,synchronized是對象鎖。
2016-10-12
你的代碼有兩處錯誤
1.用繼承Thread的方法實現(xiàn)多線程,需要new多個對象,這也是你在共享變量是加static的原因,所以,你使用的鎖對象this是不同的對象,所以不能實現(xiàn)線程的互斥.可以使用該類的字節(jié)碼對象Ticket.class作為鎖對象.
2.如果已經(jīng)實現(xiàn)了互斥,你需要在同步代碼塊中增加一個判斷條件,用來終止程序繼續(xù)執(zhí)行,否則會出現(xiàn)打印負數(shù)的情況.因為, ?未獲得鎖的線程會在循環(huán)內(nèi)等待,當一條線程將tickets--到0的時候,其他等待的線程獲得鎖以后會繼續(xù)執(zhí)行后續(xù)代碼,導致運行結(jié)果不準確.
2016-03-18
用你的代碼可以實現(xiàn)多個線程同時賣票啊,不知道你說的是什么情況