class Station extends Thread{
public Station(String name) {
super(name); }
boolean flag=true;
private Object lock=new Object();
static int tics = 1;
public void run(){
while(flag){
synchronized(lock) {
try {
Station.sleep(200);
}catch (InterruptedException e) {
e.printStackTrace();
}
if(tics<=20)
{
System.out.println(Station.currentThread().getName() + "正在賣第 "+ tics++ +"票.." );
}
else {
System.out.println("票賣完了!");
flag=false;
}
}
}
}
}
public class Sale{
public static void main(String args[]) {
Station Station1 = new Station("視窗1");
Station Station2 = new Station("視窗2");
Station Station3 = new Station("視窗3");
Station1.start();
Station2.start();
Station3.start();
}
}
運行結果:
視窗3正在賣第 2票..
視窗2正在賣第 1票..
視窗1正在賣第 3票..
視窗3正在賣第 4票..
視窗2正在賣第 5票..
視窗1正在賣第 5票..
視窗3正在賣第 6票..
視窗2正在賣第 7票..
視窗1正在賣第 7票..
視窗3正在賣第 8票..
視窗1正在賣第 9票..
視窗2正在賣第 9票..
視窗1正在賣第 11票..
視窗2正在賣第 12票..
視窗3正在賣第 10票..
視窗1正在賣第 13票..
視窗2正在賣第 13票..
視窗3正在賣第 14票..
視窗2正在賣第 15票..
視窗1正在賣第 16票..
視窗3正在賣第 17票..
視窗2正在賣第 18票..
視窗1正在賣第 19票..
視窗3正在賣第 20票..
票賣完了!
票賣完了!
票賣完了!
是哪出問題了呢? 票數重復了,“票賣完了”也重復了三次??
uj5u.com熱心網友回復:
你new了三個Station,每個Station都有自己的屬性lock,你覺得這三個lock是同一個物件嗎?不是同一個物件,你鎖它有意義嗎?多執行緒要共用一個物件,鎖這個共用物件鎖才有意義。所以,最簡單的方法就是把lock改成static
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/207271.html
標籤:Java相關
上一篇:問一下這個有啥問題呀
下一篇:問一個基礎的代碼的問題
