diff --git a/javaSE-day06/src/com/inmind/thread_safe04/Demo04.java b/javaSE-day06/src/com/inmind/thread_safe04/Demo04.java new file mode 100644 index 0000000..1b170df --- /dev/null +++ b/javaSE-day06/src/com/inmind/thread_safe04/Demo04.java @@ -0,0 +1,25 @@ +package com.inmind.thread_safe04; +/* +我们通过一个案例,演示线程的安全问题: + +电影院要卖票,我们模拟电影院的卖票过程。假设要播放的电影是 “葫芦娃大战奥特曼”,本次电影的座位共100个(本场电影只能卖100张票)。 + +我们来模拟电影院的售票窗口,实现多个窗口同时卖 “葫芦娃大战奥特曼”这场电影票(多个窗口一起卖这100张票) + +需要窗口,采用线程对象来模拟;需要票,Runnable接口子类来模拟 + +分析: +一个卖100张票的任务:Runnable接口表示 +3个窗口来卖:3个线程 + */ +public class Demo04 { + public static void main(String[] args) { + //创建3个窗口来执行同一个任务 + TicketTask ticketTask = new TicketTask(); + + new Thread(ticketTask,"窗口1").start(); + new Thread(ticketTask,"窗口2").start(); + new Thread(ticketTask,"窗口3").start(); + + } +} diff --git a/javaSE-day06/src/com/inmind/thread_safe04/TicketTask.java b/javaSE-day06/src/com/inmind/thread_safe04/TicketTask.java new file mode 100644 index 0000000..247b1c0 --- /dev/null +++ b/javaSE-day06/src/com/inmind/thread_safe04/TicketTask.java @@ -0,0 +1,24 @@ +package com.inmind.thread_safe04; + +public class TicketTask implements Runnable{ + //定义100张票电影票 + int tickeCount = 100; + + @Override + public void run() { + //有票就卖 + while (true) { + if (tickeCount > 0) { + try { + Thread.sleep(50); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(Thread.currentThread().getName() + "正在卖第" + tickeCount + "张电影票"); + tickeCount--; + } else { + break; + } + } + } +}