多线程并发之抢火车票案例--解决方案一(同步代码块解决)
package com.thread;
/**
* 抢票示例
* @author 11011844
*
*/
class ThreadTrain implements Runnable {
private Object obj =new Object();
private int trainCount=100;
//设置100张火车票
public void run() {
while(trainCount>0){//开始出售票
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//出售票
sale();
}
}
private void sale() {
synchronized (obj) {//同步多线程共享全变量
if(trainCount>0){
System.out.println(Thread.currentThread().getName()+",出售第"+(100-trainCount+1)+"票");
trainCount--;
}
}
}
}
public class SynchronizedDmeo {
public static void main(String[] args) {
ThreadTrain threadTrain=new ThreadTrain();
//实例抢票:(多线程共享同一个全局变量,进行写的操作。)
Thread t1=new Thread(threadTrain,"窗口1");
Thread t2=new Thread(threadTrain,"窗口2");
t1.start();
t2.start();
}
}
【多线程并发之抢火车票案例--解决方案一(同步代码块解决)】总结:这个方式比较容易实现,但是性能比较差。
推荐阅读
- java理论基础Stream管道流状态与并行操作
- spring|spring data JPA 中的多属性排序方式
- java中归并排序和Master公式详解
- Rancher|Rancher 和知乎超大规模多集群管理联合实践
- 全量、增量数据在HBase迁移的多种技巧实践
- svn服务支持网页显示并增加在线预览功能,支持视频在线播放
- linux|linux系统下安装并配置canal
- Linux|Linux C/C++ 开发(学习笔记十三)(百万并发的服务器实现)
- 数据库|数据库 | MySQL Workbench创建数据库并使用JDBC连接数据库
- 实用工具|Mockjs模拟接口实现增删改查、分页、多条件查询