多线程卖票
发布日期:2022-04-11 08:52:59
浏览次数:12
分类:博客文章
本文共 2482 字,大约阅读时间需要 8 分钟。
package com.yangyuanyuan.juc1205;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class Ticket //资源类 = 实例变量+实例方法{ private int number = 30; // List list = new ArrayList(); Lock lock = new ReentrantLock(); public void sale() { lock.lock(); try { if(number > 0) { System.out.println(Thread.currentThread().getName()+"\t卖出第:"+(number--)+"\t 还剩下: "+number); } }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } }}/** * * 题目:三个售票员 卖出 30张票 * 笔记:如何编写企业级的多线程代码 * 固定的编程套路+模板是什么? * * 1 在高内聚低耦合的前提下,线程 操作 资源类 * * 1.1 一言不合,先创建一个资源类 * */public class SaleTicketDemo01{ public static void main(String[] args)//主线程,一切程序的入口 { Ticket ticket = new Ticket();//// @FunctionalInterface// public interface Runnable {//// public abstract void run();// } //2、lambda表达式 new Thread(() -> { for (int i = 1; i <=40; i++) ticket.sale(); },"A").start(); new Thread(() -> { for (int i = 1; i <=40; i++) ticket.sale(); },"B").start(); new Thread(() -> { for (int i = 1; i <=40; i++) ticket.sale(); },"C").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <=40; i++) ticket.sale(); { ticket.sale(); } } }, "A").start(); //业务逻辑一行 括号可省略for (int i = 1; i <=40; i++) ticket.sale(); //1、匿名内部类 //Thread(Runnable target, String name) Allocates a new Thread object. /*new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <=40; i++) { ticket.sale(); } } }, "A").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <=40; i++) { ticket.sale(); } } }, "B").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <=40; i++) { ticket.sale(); } } }, "C").start(); */ }}
转载地址:https://www.cnblogs.com/qfdy123/p/14320406.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月21日 11时16分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
007_shell中把变量重置为null
2019-04-27
008_shell创建只读量
2019-04-27
009_shell中从标准输入信息
2019-04-27
010_bash脚本的参数传递
2019-04-27
011_命令行参数的左移
2019-04-27
012_bash中的if判断条件
2019-04-27
013_bash中的加法
2019-04-27
014_bash中的for循环
2019-04-27
015_Arduino上实现一个简单的番茄时钟
2019-04-27
021_Excel的条件格式
2019-04-27
022_Excel空白值批量填充默认值
2019-04-27
023_emacs git-gutter+报错解决
2019-04-27
024_spacemacs支持org-pomodoro的声音提示
2019-04-27
025_everything搜索使用体验
2019-04-27
026_好用的windows小工具clover
2019-04-27
027-Mac触摸板实现窗口移动
2019-04-27
028_AUTOSAR RTE学习笔记-1
2019-04-27
029_AUTOSAR VFB学习笔记-2
2019-04-27
030_AUTOSAR软件组件学习笔记
2019-04-27
031_AUTOSAR学习笔记_BSW
2019-04-27