Java线程卖票问题深入解析,有哪些关键点?

2026-04-30 05:163阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计438个文字,预计阅读时间需要2分钟。

Java线程卖票问题深入解析,有哪些关键点?

使用Java代码模拟卖100张火车票问题:有四个售票窗口同时售票,不能卖出同一张火车票。

javapackage lesson;

public class Demo1 { public static void main(String[] args) { int totalTickets=100; // 总票数 boolean[] tickets=new boolean[totalTickets]; // 标记每张票是否已售出

for (int i=0; i

// 模拟四个售票窗口同时售票 for (int i=0; i <4; i++) { int ticketIndex=(int) (Math.random() * totalTickets); // 随机选择一个票号 if (!tickets[ticketIndex]) { // 如果该票未被售出 tickets[ticketIndex]=true; // 售出该票 System.out.println(售票窗口 + (i + 1) + 售出票号 + (ticketIndex + 1)); } else { System.out.println(售票窗口 + (i + 1) + 尝试售出已被售出的票号 + (ticketIndex + 1)); } } }}

用Java代码模拟卖100张火车票问题:四个售票窗口同时售票且不能卖出同一张火车票。

代码如下。

package lesson; public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub Train tt = new Train(); Thread t1 = new Thread(tt); Thread t2 = new Thread(tt); Thread t3 = new Thread(tt); Thread t4 = new Thread(tt); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t4.setName("窗口4"); t1.start(); t2.start(); t3.start(); t4.start(); } } class Train implements Runnable{ int a= 1; @Override public synchronized void run() {//synchronized为进程上锁 // TODO Auto-generated method stub while(true) { if(a<=100) { System.out.println(Thread.currentThread().getName()+"卖出"+a+"号票"); a++; } try { this.wait(230); // Thread.sleep(100);//结果输出只有窗口1卖了所有票如图2所示 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

wait()正常运行结果图1:

sleep()运行结果如图2所示:

两种结果不同的主要主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

总结

到此这篇关于Java线程中卖火车票问题的深入讲解的文章就介绍到这了,更多相关Java线程卖火车票问题内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

Java线程卖票问题深入解析,有哪些关键点?

本文共计438个文字,预计阅读时间需要2分钟。

Java线程卖票问题深入解析,有哪些关键点?

使用Java代码模拟卖100张火车票问题:有四个售票窗口同时售票,不能卖出同一张火车票。

javapackage lesson;

public class Demo1 { public static void main(String[] args) { int totalTickets=100; // 总票数 boolean[] tickets=new boolean[totalTickets]; // 标记每张票是否已售出

for (int i=0; i

// 模拟四个售票窗口同时售票 for (int i=0; i <4; i++) { int ticketIndex=(int) (Math.random() * totalTickets); // 随机选择一个票号 if (!tickets[ticketIndex]) { // 如果该票未被售出 tickets[ticketIndex]=true; // 售出该票 System.out.println(售票窗口 + (i + 1) + 售出票号 + (ticketIndex + 1)); } else { System.out.println(售票窗口 + (i + 1) + 尝试售出已被售出的票号 + (ticketIndex + 1)); } } }}

用Java代码模拟卖100张火车票问题:四个售票窗口同时售票且不能卖出同一张火车票。

代码如下。

package lesson; public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub Train tt = new Train(); Thread t1 = new Thread(tt); Thread t2 = new Thread(tt); Thread t3 = new Thread(tt); Thread t4 = new Thread(tt); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t4.setName("窗口4"); t1.start(); t2.start(); t3.start(); t4.start(); } } class Train implements Runnable{ int a= 1; @Override public synchronized void run() {//synchronized为进程上锁 // TODO Auto-generated method stub while(true) { if(a<=100) { System.out.println(Thread.currentThread().getName()+"卖出"+a+"号票"); a++; } try { this.wait(230); // Thread.sleep(100);//结果输出只有窗口1卖了所有票如图2所示 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

wait()正常运行结果图1:

sleep()运行结果如图2所示:

两种结果不同的主要主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

总结

到此这篇关于Java线程中卖火车票问题的深入讲解的文章就介绍到这了,更多相关Java线程卖火车票问题内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

Java线程卖票问题深入解析,有哪些关键点?