[javaSE] 多线程(售票例子)
2023-02-18 15:47:16 时间
需求:简单的买票程序,多个窗口卖票,多线程
定义一个类Ticket实现Runnable接口,
定义成员属性int类型的票数nums
实现run()方法,run方法中
while(true)的死循环,打印nums--
获取Ticket对象,new出来
获取Thread()对象,new出来,构造参数:Runable对象
调用Thread对象的start()方法,开启线程
此时会有线程安全问题,使用synchronized同步代码块解决安全问题
避免死锁问题,同步中嵌套同步,而锁不同
class Ticket implements Runnable { private int nums = 100; @Override public void run() { while (true) { synchronized (this) { if (nums > 0) { try { Thread.sleep(10); } catch (Exception e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "===" + (nums--)); }else{ break; } } } } } public class TicketDemo { /** * @param args */ public static void main(String[] args) { Ticket ticket = new Ticket(); new Thread(ticket).start(); new Thread(ticket).start(); new Thread(ticket).start(); new Thread(ticket).start(); } }
相关文章
- 复杂排序---归并排序
- 检索算法---顺序查找
- 检索算法---二分查找
- 最小编辑距离
- Antd源码浅析(一)Icon组件
- Antd源码浅析(二)InputNumber组件 一
- Antd源码浅析(三)InputNumber组件 二
- 背包问题
- 动态规划
- 二叉树遍历
- Babel 配置实验报告
- 前端脚手架构建实践
- PostCSS原理解析
- 前端代码风格自动化系列(一)之Husky
- 前端代码风格自动化系列(二)之Commitlint
- 前端代码风格自动化系列(三)之Lint-staged
- 前端代码风格自动化系列(四)之Prettier
- 前端代码风格自动化系列(五)之共同出击
- 说说Loading这件小事
- 前端自动化测试