多執行緒使用同一個資料來源的安全問題解決 使用 synchronized程式碼塊
阿新 • • 發佈:2018-12-01
package cn.itcast.demo;
/*
- 通過執行緒休眠,出現安全問題
- 解決安全問題,Java程式,提供技術,同步技術
- 公式:
- synchronized(任意物件){
-
執行緒要操作的共享資料
- }
- 同步程式碼塊
*/
public class Tickets implements Runnable{
//定義出售的票源 private int ticket = 100; private Object obj = new Object(); public void run(){ while(true){ //執行緒共享資料,保證安全,加入同步程式碼塊 synchronized(obj){ //對票數判斷,大於0,可以出售,變數--操作 if( ticket > 0){ try{ Thread.sleep(10); }catch(Exception ex){} System.out.println(Thread.currentThread().getName()+" 出售第 "+ticket--); } } } }
}
package cn.itcast.demo;
/*
-
多執行緒併發訪問同一個資料資源
-
3個執行緒,對一個票資源,出售
*/
public class ThreadDemo {
public static void main(String[] args) {
//建立Runnable介面實現類物件
Tickets t = new Tickets();
//建立3個Thread類物件,傳遞Runnable介面實現類
Thread t0 = new Thread(t);
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);t0.start();t1.start();t2.start();
}
}