Java线程中卖火车票问题的深入讲解
作者:玖然 时间:2022-07-22 07:38:52
用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方法释放了锁,使得其他线程可以使用同步控制块或者方法。
来源:https://blog.csdn.net/qq_44086320/article/details/109584382
标签:java,线程,火车票
0
投稿
猜你喜欢
使用 Lambda 取代 Android 中的匿名类
2023-11-16 14:01:04
Java 详解包装类Integer与int有哪些共通和不同
2022-06-15 20:12:18
C#正则实现Ubb解析类的代码
2021-10-23 22:19:38
C#获取路由器外网IP,MAC地址的实现代码
2021-07-03 06:01:32
Unity3D Shader实现扫描显示效果
2023-03-16 22:51:39
Django之多对多查询与操作方法详解
2021-08-03 03:21:58
C#多线程之取消架构介绍
2022-03-06 22:14:42
java中@SuppressWarnings注解用法详解
2023-09-20 23:11:40
详解ASP.NET中Identity的身份验证代码
2022-05-20 04:43:48
mybatis中<choose>标签的用法说明
2023-07-22 19:37:27
springboot热部署知识点总结
2021-08-23 12:05:43
C#实现简单的聊天窗体
2022-11-09 03:25:13
Android手机屏幕同步工具asm.jar
2023-10-31 20:01:26
C#使用struct直接转换下位机数据的示例代码
2023-06-07 01:49:01
详解Spring Cloud Zuul 服务网关
2021-11-15 19:24:19
java-制表符\\t的使用说明
2023-12-03 10:18:02
Ubuntu中为Android简单介绍硬件抽象层(HAL)
2022-10-27 21:12:45
Java的设计模式编程中迪米特法则的应用示例
2022-10-29 01:34:35
Java分析讲解序列化与字典功能的序列化
2021-11-12 11:19:25
简单好用的Adapter---ArrayAdapter详解
2022-09-08 08:33:05