package demo.thread;
class SaleTickeRunnableImopl implements Runnable {
/*static*/ int num = 50; //无需static关键字共享数据 //只有一个SaleTickeRunnableImopl对象
public static void main(String[] args) {
SaleTickeRunnableImopl s = new SaleTickeRunnableImopl();
Thread thread1 = new Thread(s, "1号窗口");
Thread thread2 = new Thread(s, "2号窗口");
Thread thread3 = new Thread(s, "3号窗口");
thread1.start();
thread2.start();
thread3.start();
}
@Override
public void run() {
System.out.println("this:"+ this);//demo.RunnableImpl@7c344a45
System.out.println("当前线程:"+ Thread.currentThread());//Thread[接口实现的线程,5,main]
while (true) {
synchronized ("锁") {
if (num > 0) {
System.out.println(Thread.currentThread().getName() + "卖出第" + num + "张票");
num--;
} else {
break;
}
}
}
}
}
this:demo.thread.SaleTickeRunnableImopl@16727385
当前线程:Thread[2号窗口,5,main]
2号窗口卖出第50张票
this:demo.thread.SaleTickeRunnableImopl@16727385
当前线程:Thread[1号窗口,5,main]
2号窗口卖出第49张票
2号窗口卖出第48张票
2号窗口卖出第47张票
2号窗口卖出第46张票
2号窗口卖出第45张票
2号窗口卖出第44张票
2号窗口卖出第43张票
2号窗口卖出第42张票
2号窗口卖出第41张票
2号窗口卖出第40张票
2号窗口卖出第39张票
2号窗口卖出第38张票
2号窗口卖出第37张票
2号窗口卖出第36张票
2号窗口卖出第35张票
2号窗口卖出第34张票
2号窗口卖出第33张票
2号窗口卖出第32张票
2号窗口卖出第31张票
2号窗口卖出第30张票
2号窗口卖出第29张票
2号窗口卖出第28张票
2号窗口卖出第27张票
2号窗口卖出第26张票
2号窗口卖出第25张票
2号窗口卖出第24张票
2号窗口卖出第23张票
2号窗口卖出第22张票
2号窗口卖出第21张票
2号窗口卖出第20张票
2号窗口卖出第19张票
2号窗口卖出第18张票
2号窗口卖出第17张票
2号窗口卖出第16张票
2号窗口卖出第15张票
2号窗口卖出第14张票
2号窗口卖出第13张票
1号窗口卖出第12张票
this:demo.thread.SaleTickeRunnableImopl@16727385
1号窗口卖出第11张票
当前线程:Thread[3号窗口,5,main]
1号窗口卖出第10张票
1号窗口卖出第9张票
1号窗口卖出第8张票
1号窗口卖出第7张票
1号窗口卖出第6张票
1号窗口卖出第5张票
1号窗口卖出第4张票
1号窗口卖出第3张票
1号窗口卖出第2张票
1号窗口卖出第1张票
Disconnected from the target VM, address: ‘127.0.0.1:65305’, transport: ‘socket’
Process finished with exit code 0