本文目錄一覽:
java多線程模擬買票問題 用圖形用戶界面
能詳細說明一下買票按鈕的功能是什麼嗎
程序有幾個問題:
第一,maipiao類名要首字母大寫,變量的定義盡量不要使用中文
第二,Sell A; 沒有初始化,然後你就開始了調用
第三,public void actionPerformed(ActionEvent e),放在Maipiao類裡面,什麼時候被調用??
第四,多線程的public void run()方法,同樣在Maipiao類中,可是它沒有被調用
問題有不少,我實在修改不下去了,明天白天如果有空就幫你重寫一個
終於給你修改完了,要的話留郵箱
java 多線程模擬火車售票系統問題
在synchronized(str) 里加一句 if(ticket 0) //判斷是否有餘票,沒有餘票還賣什麼?
也就是這樣:
package socket;
public class Test
{
public static void main(String [] args)
{
TestThread tt=new TestThread();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
}
}
class TestThread implements Runnable
{
int ticket=10;
String str=” “;
public void run()
{
while(ticket0)
{
synchronized(str)
{
if(ticket 0 ) {
System.out.println(Thread.currentThread().getName()+”:ticket “+ticket+” is saling”);
ticket–;
}
}
}
}
}
你的while循環只是超出票數的循環,在同步裡面還要有判斷是否有票的條件.因為裡面同步的時候除了一個線程在執行外,其它幾個都在等待,而此時並沒有跳出循環,當然會出現負數了.
當然把while判斷放到同步代碼裡面去也可以.不過這樣就沒有超出票數的判斷了,實際應用中應該有個超出票數的判斷.. 例如 :for(int i=0;i100;i++) //同步檢測 只有5張票,顯示100張,實際上賣出的還是5張..用來檢測同步是否正確…
java多線程模擬售票問題
結果是對的,每一個售票的線程都有自己票數,所以每個線程都會售出十張票;
如果你想讓這五個售票線程只能售出十張票的話,那就
private static int Ticketnum=10;
//設置成靜態變量,這樣的話,他就不屬於實例了,而是屬於整個類了
原創文章,作者:F3ZRS,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/127839.html