方法快解決多執行緒的同步安全問題,以及其中鎖的問題
阿新 • • 發佈:2018-12-01
package cn.itcast.demo1;
/*
- 採用同步方法形式,解決執行緒的安全問題
- 好處: 程式碼簡潔
- 將執行緒共享資料,和同步,抽取到一個方法中
- 在方法的宣告上,加入同步關鍵字
- 問題:
- 同步方法有鎖嗎,肯定有,同步方法中的物件鎖,是本類物件引用 this
- 如果方法是靜態的呢,同步有鎖嗎,絕對不是this
- 鎖是本類自己.class 屬性
- 靜態方法,同步鎖,是本類類名.class屬性
*/
public class Tickets implements Runnable{
//定義出售的票源 private int ticket = 100; public void run(){ while(true){ payTicket(); } } public synchronized void payTicket(){ if( ticket > 0){ try{ Thread.sleep(10); }catch(Exception ex){} System.out.println(Thread.currentThread().getName()+" 出售第 "+ticket--); } }
}
package cn.itcast.demo1;
/*
-
多執行緒併發訪問同一個資料資源
-
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();
}
}