標籤: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:同步和死結