通过使用同步代码块解决实现Thread类继承的方法的线程安全问题
class Window2 extends Thread{
private static int ticket=100;//同一个类的所有对象共享一个静态变量
static Object object=new Object();
public void run() {
while (true) {
synchronized (object) {
//synchronized (this) {是错误的,因为此时this有三个对象,锁就不唯一了
//synchronized (Window2.class) {当前对象,是正确的,因为class也是一个对象
int a=101-ticket;
if(ticket>0) {
System.out.println(Thread.currentThread().getName()+" 卖出第 "+a+"张票");
ticket--;
}
else {
break;
}
}
}
}
}
public class WindowsTest2 {
public static void main(String[] args) {
Window2 t1=new Window2();
Window2 t2=new Window2();
Window2 t3=new Window2();
t1.setName("窗口1");
t2.setName("窗口2");
t3.setName("窗口3");
t1.start();
t2.start();
t3.start();
}
}