你三个线程共用的一个Runable,属于资源共享了 一个结束都结束了
你可以试试创建三个Test1分别开启线程
你这个ticket没加锁,三个线程肯定会乱卖的
题主,你写的这个代码有两个问题。
public class SellTicket implements Runnable {
public Integer ticket = 100;
@Override
public void run() {
while (true){
/**
* 加锁
*/
synchronized (ticket){
if (ticket <= 0){
break;
}
System.out.println(Thread.currentThread().getName()+"得票1张,剩余:\t\t"+--ticket);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
SellTicket sellTicket = new SellTicket();
Thread t1 = new Thread(sellTicket,"小明");
Thread t2 = new Thread(sellTicket,"老师");
Thread t3 = new Thread(sellTicket,"黄牛党");
t2.start();
t1.start();
t3.start();
}
}
你多运行几次就可以了,而且会出现多种不一样的结果。如果你想出现-1 ,-2 。那么就需要线程同步处理了
```java
synchronized (this){
System.out.println(Thread.currentThread().getName() + "得票:" + --ticket);
}
小明-余票:9
黄牛-余票:8
老师-余票:7
黄牛-余票:6
老师-余票:5
小明-余票:4
黄牛-余票:3
小明-余票:2
老师-余票:1
小明-余票:0
老师-余票:-1
黄牛-余票:-2
Process finished with exit code 0
```。