使用同步方法解决继承Thread类的线程安全问题
class windows4 extends Thread{
public static int tickets = 100;
@Override
public void run() {
while (true){
show();
}
}
private static synchronized void show(){
if(tickets > 0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() +
": 卖票-票号: " + tickets);
tickets--;
}
}
}
public class WindowsTest4 {
public static void main(String[] args) {
windows4 w1 = new windows4();
windows4 w2 = new windows4();
windows4 w3 = new windows4();
w1.setName("窗口1:");
w2.setName("窗口2:");
w3.setName("窗口3:");
w1.start();
w2.start();
w3.start();
}
}
说明
- 此题使用继承Thread类方式创建的线程有三个子类对象三个对象调用show()方法造成了锁的不唯一
- 解决方法
-
将show()方法定义为static