线程间的数据共享(卖票)
用3个线程 模拟 3个售票口, 总共出售 200张票
- 用3个线程模拟3个售票口的售票行为
- 这个3个线程, 应该共享200张票的数据
public class SellTicketsTester {
public static void main(String[] args) {
SellTickets t = new SellTickets();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
class SellTickets implements Runnable {
private int tickets = 200;
public void run() {
while (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "is selling ticket" + tickets--);
}
}
}
在这个例子中, 创建了3个线程, 每个线程调用的是 同一个 SellTickets 对象中的 run()方法, 访问的是同一个对象的变量(tickets)
如果是通过创建 Thread类的 子类来模拟售票过程, 再创建3个新线程,
则每个线程都会有 各自的方法 和 变量,
虽然方法是相同的, 但变量确实各有 200张票, 因而结果将会是 各卖出200张票, 和原意就不符了
参考链接
https://www.xuetangx.com/learn/THU08091000252/THU08091000252/7754101/video/12732924