通过使用同步方法解决实现Runnable接口的方式的线程安全问题
class Window3 implements Runnable{
private int Ticket =20;//多个线程共用一个Ticket
Object object = new Object();
public void run() {
while (true) {
show();
}
}
//同步方法
//方法内包含操作共享数据的代码,
//即通过同步代码块解决线程安全性问题时synchronized锁内部的代码
private synchronized void show() {//非静态方法同步监视器:this
int a=21-Ticket;
if (Ticket>0) {
System.out.println(Thread.currentThread().getName()+" 卖出第 "+a+"张票");
Ticket--;
}
}
}
public class WindowsTest3 {
public static void main(String[] args) {
Window3 w=new Window3();//一个对象,多个线程
Thread t1=new Thread(w);
Thread t2=new Thread(w);
Thread t3=new Thread(w);
t1.setName("窗口1");
t2.setName("窗口2");
t3.setName("窗口3");
t1.start();
t2.start();
t3.start();
}
}