用線程同步賣票
package com.zk920;
/**
* 練習:賣票,售票視窗1,售票視窗2,售票視窗3
* 賣票量:50張;
*
* 同步 保證資料的完整性
* 同步代碼塊--->産生的問題就是線程的安全性 互斥鎖機制
* 格式:
* synchronized (鎖的對象) {
* 需要被執行的同步代碼
* }
* 1,鎖的對象可以使用任何對象
* 2,鎖對象必須是多個線程共享的對象
* 3,線程調用sleep的方法,這時不會釋放鎖
* 4,隻有會出現線程安全的時候,才會使用同步機制
*
*/
class Sale extends Thread {
static int num = 1000;
public Sale(String name) {
super(name); //調用父類Thread一個參數的構造方法,初始化的是線程的名字
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized ("鎖") { //鎖這個地方寫什麼都行,但是必須是個對象,不能是數
if (num>0) {
System.out.println(Thread.currentThread().getName()+"賣了"+num+"号票...");
num--;
}
else{
System.out.println("賣完了");
break;
}
}
}
}
}
public class Demo4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//生成售票視窗
Sale sale1 = new Sale("售票視窗1");
Sale sale2 = new Sale("售票視窗2");
Sale sale3 = new Sale("售票視窗3");
sale1.start();
sale2.start();
sale3.start();
}
}