package test1; public class Main { public static void main(String[] args) { T t = new T(); new Thread(t,"窗口1").start(); new Thread(t,"窗口2").start(); new Thread(t,"窗口3").start(); new Thread(t,"窗口4").start(); } } class T implements Runnable{ private static int num=200; @Override public void run() { while(true) { synchronized (T.class) { if (num <= 0) break; try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(Thread.currentThread().getName() + "出售了一张票," + "剩余票数为" + (--num)); } } } } 分析这段代码
时间: 2024-02-14 21:09:43 浏览: 111
test
这段代码为多线程售票程序,创建了4个线程模拟4个窗口售票。在T类中,使用synchronized关键字对num进行同步,避免了多个线程同时对同一个变量进行操作导致数据不一致的问题。当num小于等于0时,线程停止运行。
具体分析如下:
1. Main类中通过创建T对象,以及四个线程对象,调用start方法启动线程,实现了多线程售票。
2. T类实现了Runnable接口,重写了run方法。在run方法中使用while循环,保证线程不停止。
3. 使用synchronized关键字同步num变量,保证多个线程对num变量的访问是有序的,避免出现数据不一致的情况。
4. 在每个线程售出一张票时,使用--num操作减少num变量的值,表示售出一张票。
5. 最后当num小于等于0时,退出循环,线程停止运行。
阅读全文