1.同步代碼塊 在代碼塊上“synchronized”關鍵字,則此代碼塊就稱為同步代碼塊 2.同步代碼塊格式 synchronized(同步對象){ 需要同步的代碼; } 3.同步方法 除了代碼塊可以同步,方法也是可以同步的 4.方法同步格式 synchronized void 方法名稱(){}
//沒加同步的時候public class MyThread implements Runnable{ PRivate int ticket=5; public void run(){ for(int i=0;i<10;i++){ System.out.println("車票:"+ticket--); } }}//測試public class ThreadTest{ public static void main(String[] args){ MyThread mt=new MyThread(); Thread t1=new Thread(mt); Thread t2=new Thread(mt); Thread t3=new Thread(mt); t1.start(); t2.start(); t3.start(); }}//加同步代碼塊之后public class MyThread implements Runnable{ private int ticket=5; public void run(){ for(int i=0;i<10;i++){ synchronized(this){ if(ticket > 0){ try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println("車票:"+ticket--); } } } }}//加同步方法public void run(){ for(int i=0;i<10;i++){ tell(); }}public synchonized void tell(){ if(ticket > 0){ try{ Thread.sleep(500); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println("車票:"+ticket--); }}
suspend()線程暫時掛起, resume()線程恢復運行, wait()暫停 此三個方法容易引起死鎖
新聞熱點
疑難解答