標籤:java dem 分享 同步代碼塊 alt 部分 過程 共用 blog
多線程的運行出現了安全問題
原因:
當多條語句在操作同一個線程資料的時候,一個線程對多條語句只執行了一部分,還沒執行完
另一個線程參與進來執行,導致共用資料的錯誤
解決辦法:
對多條操作共用資料的語句,只能讓一個線程都執行完。在執行過程中,其它線程不可以參與執行。
JAVA對於多安全執行緒問題,提供了專業的解決方式
就是同步代碼塊
synchronized(對象)
{
需要被同步的代碼
}
1 class Ticket implements Runnable//extends Thread 2 { 3 private int tick = 100; 4 Object obj = new Object(); 5 public void run() 6 { 7 while(true) 8 { 9 synchronized(obj)10 {11 if(tick>0)12 {13 try{Thread.sleep(10);}catch(Exception e){}14 System.out.println(Thread.currentThread().getName()+"sales : "+tick--);15 }16 }17 }18 }19 }20 class Demo21 {22 23 public static void main(String[] args)24 {25 Ticket t = new Ticket();26 Thread t1 = new Thread(t);27 Thread t2 = new Thread(t);28 Thread t3 = new Thread(t);29 Thread t4 = new Thread(t);30 t1.start();31 t2.start();32 t3.start();33 t4.start();34 /*35 Ticket t1 = new Ticket();36 Ticket t2 = new Ticket();37 Ticket t3 = new Ticket();38 t1.start();39 t2.start();40 t3.start();41 */42 //System.out.println("");43 }44 }View Code
JAVA中的多線程(三)