java:同步和死結

來源:互聯網
上載者:User

標籤:stack   png   bsp   public   har   tar   over   rri   rup   

多個線程共用一個資源的時候需要進行同步(否則會出現錯誤:如負數,重複數),但是過多的同步會造成死結.

synchronized(this)

{

 

}

非同步情況:

public class SyncThread implements Runnable {private int titick = 5;@Overridepublic void run() {// TODO 自動產生的方法存根for(int i = 0; i <50; i++){if( this.titick > 0 ){//如果遇到延時情況,就會出錯try {Thread.sleep(300);} catch (InterruptedException e) {// TODO 自動產生的 catch 塊e.printStackTrace();}System.out.println("賣出去第:" + this.titick-- + "張票");}}}}public class Demo {public static void main(String[] args) {// TODO 自動產生的方法存根SyncThread st = new SyncThread();new Thread(st, "票販子A").start();new Thread(st, "票販子B").start();new Thread(st, "票販子C").start();}}

結果:

  

 

 

 

同步情況:

public class SyncThread2 implements Runnable {private int titict = 5;@Overridepublic void run() {// TODO 自動產生的方法存根for(int i = 0; i < 50; i++){synchronized(this){if( this.titict > 0){try {Thread.sleep(300);} catch (InterruptedException e) {// TODO 自動產生的 catch 塊e.printStackTrace();}System.out.println("賣出:"+ this.titict--);}}}}}public class Demo2 {public static void main(String[] args) {// TODO 自動產生的方法存根SyncThread2 sy2 = new SyncThread2();new Thread(sy2, "票販子1").start();new Thread(sy2, "票販子2").start();new Thread(sy2, "票販子3").start();}}

  結果:

 

java:同步和死結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.