多執行緒案例 Java

2021-08-29 12:15:43 字數 2287 閱讀 1309

1、購票(不安全策略)

**片段:

public class main catch (exception e) }}

};new thread(r).start();

new thread(r).start();

new thread(r).start();

new thread(r).start();

}}

顯示結果:

賣出了一張票,還剩下6張票

賣出了一張票,還剩下5張票

賣出了一張票,還剩下5張票

賣出了一張票,還剩下5張票

賣出了一張票,還剩下2張票

賣出了一張票,還剩下2張票

賣出了一張票,還剩下2張票

賣出了一張票,還剩下2張票

賣出了一張票,還剩下0張票

賣出了一張票,還剩下0張票

2、購票(安全策略)

**片段:

public class main catch (exception e) }}

};new thread(r).start();

new thread(r).start();

new thread(r).start();

new thread(r).start();

}}

顯示結果:

賣出了一張票,還剩下9張票

賣出了一張票,還剩下8張票

賣出了一張票,還剩下7張票

賣出了一張票,還剩下6張票

賣出了一張票,還剩下5張票

賣出了一張票,還剩下4張票

賣出了一張票,還剩下3張票

賣出了一張票,還剩下2張票

賣出了一張票,還剩下1張票

賣出了一張票,還剩下0張票

注:第乙個執行緒進入run()後,其他程序無法進入,直到第乙個執行緒執行完畢才允許其他程序進入,而此時ticket已經為0,其他程序不能進入迴圈體,因此,退出。

其中,形如

synchronized (main.class) {}包含**塊的結構也能達到同樣的效果。

3、wait()和notify()

**片段:

public class main  catch (interruptedexception e) 

system.out.println("t1 end!");}}

}.start();

new thread()

}}.start();

}}

結果顯示:

t1 start!

t2 start!

t2 end!

t1 end!

wait()方法可以使執行緒進入等待狀態,而notify()可以使等待的狀態喚醒。這樣的同步機制十分適合生產者、消費者模式:消費者消費某個資源,而生產者生產該資源。當該資源缺失時,消費者呼叫wait()方法進行自我阻塞,等待生產者的生產;生產者生產完畢後呼叫notify/notifyall()喚醒消費者進行消費。

4、wait()notify()精細控制

**片段:

public class main  catch (interruptedexception e) 

system.out.println("t1 end!");}}

}.start();

new thread()

}}.start();;

new thread()

}}.start();;

new thread() catch (interruptedexception e)

system.out.println("t4 end!");}}

}.start();

}}

結果顯示:

t1 start!

t2 start!

t2 end!

t1 end!

t3 start!

t3 end!

t4 start!

很容易看出來,t4,它啟動了,但是wait了,後面已經沒有執行緒了,它的wait永遠不會有執行緒幫它notify了!於是,t4 (t4 end!沒法執行到)它就這麼等著!

Java多執行緒經典案例

1.三個售票視窗同時 20張票 public class demo1 class ticketoffice implements runnable override public void run else catch interruptedexception e 2.建立兩個執行緒,其中乙個輸出1...

Java多執行緒 執行緒通訊使用案例

執行緒通訊 wait 導致當前執行緒等待,直到其他執行緒呼叫該同步監視器的notify 方法和notifyall 方法來喚醒該執行緒 notify 喚醒在此同步監視器上等待的單個執行緒,會選擇喚醒其中的任意乙個執行緒,選擇是任意的。只有當前執行緒放棄對該同步監視器的鎖定後 呼叫wait 方法 才會執...

多執行緒死鎖案例

public class threaddeadlock implements runnable public void run else public class lockthread main方法裡測試死鎖案例 threaddeadlock t1 new threaddeadlock true t...