/** * 方式二:使用synchronized同步方法解决继承Thread方式解决售票问题中的线程安全问题 * @author wds * @date 2021-11-16-11:20 */ public class ThreadTest03 { public static void main(String[] args) { Thread03 t1 = new Thread03(); Thread03 t2 = new Thread03(); Thread03 t3 = new Thread03(); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t1.start(); t2.start(); t3.start(); } } class Thread03 extends Thread { private static int ticket = 100; //静态常量数据共享 @Override public void run() { while (true) { show(); } } public static synchronized void show() { //同步方法 if (ticket > 0) { try { Thread.sleep(100); //模拟售票所需要的时间 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在售票,票号为" + ticket); ticket--; } } }
时间: 2024-02-14 17:33:43 浏览: 57
使用同步技术模拟卖票
这段代码是一个Java多线程的例子,通过继承Thread类的方式创建了三个线程,分别表示三个售票窗口。在每个线程的run方法中,调用了show方法来模拟售票的过程。而在show方法中,使用了synchronized关键字来保证线程安全,实现了多线程环境下的售票。这种方式相对于继承Thread类的方式,更为简单直观,代码可读性更高。
阅读全文