用线程同步卖票
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();
}
}