多執行緒操作同一個範例變數的操作會引發多執行緒並行的安全問題。現有 3 個執行緒代表 3 只猴子,對類中的一個整型變數 count(代表花的總數,共 20 朵花)進行操作。該變數代表花的總數,不同猴子(執行緒)每採摘一次,花的總數少 1,直至所有花被不同的猴子採摘完,程式結束
public class T1 implements Runnable {
// public static T1 t2 = new T1();
//設定鮮花的數量為20
int num = 20;
@Override
public void run() {
synchronized (new T1()) {
while (num>0) {
System.out.println("猴子"+Thread.currentThread().getName()+"\t菜花\t"+num--);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
T1 t1=new T1();
Thread thread = new Thread(t1);
Thread thread1 = new Thread(t1);
thread1.setName("B");
thread.setName("A");
thread.start();
thread1.start();
}
}