package day11.thread;
/**
* 简单的售票程序。多个窗口同时售票。
* 注意给所有线程公共的数据tick用static修饰。
* 注意安全问题:使用Thread.sleep()可以有效检查。tick有同一张或者0、-1号等问题。
* 为什么会多次出现同一张呢?????
* 原因:多条语句操作同一个线程共享的数据时,一个线程对多条语句只执行了一部分。此时另一个线程参与进来执行。
* 解决方案:同步代码块。
* 同步的前提:两个以上的线程;多个线程使用同一个锁。
* @author Administrator
*
*/
public class ThreadDemo3 {
public static void main(String[] args) {
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
t1.start();
t2.start();
t3.start();
}
}
class Ticket extends Thread {
// private static Object obj = new Object();
private static int tick = 100;
public void run() {
while(true) {
// synchronized(obj) {
if(tick > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName() + " sale: " + tick--);
}
// }
}
}
}
|