//多线程之同步(方法)重点:synchronized关键字
class Ticket1 implements Runnable {
private int tickets = 10;
@Override
public void run() {
while (true) {
saleTicket();
if (tickets <= 0) {
break;
}
}
}
private synchronized void saleTicket() {
if (tickets > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
Logger.getLogger(Ticket1.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(Thread.currentThread().getName() + "---卖出的票" + tickets--);
}
}
}
public class Test3 {
public static void main(String[] args) {
Ticket1 ticket = new Ticket1();
new Thread(ticket, "线程一").start();
new Thread(ticket, "线程二").start();
new Thread(ticket, "线程三").start();
new Thread(ticket, "线程四").start();
}
}
//多线程之同步(代码块)
class Ticket implements Runnable {
private int tickets = 1000;
Object lock = new Object();
public void run() {
while (true) {
synchronized (lock) {
try {
Thread.sleep(10);//经过的线程休眠10毫秒
} catch (InterruptedException ex) {
Logger.getLogger(Ticket.class.getName()).log(Level.SEVERE, null, ex);
}
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "--卖出的票" + tickets--);
} else {
break;
}
}
}
}
}
public class Test2 {
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();
}
}
//多线程之插队 重点:.join()方法
class Thread1 implements Runnable {
@Override
public void run() {
for (int i = 1; i < 6; i++) {
System.out.println(Thread.currentThread().getName() + "输入:" + i);
try {
Thread.sleep(500);//线程休眠500毫秒
} catch (InterruptedException ex) {
Logger.getLogger(Thread1.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
public class Test4 {
public static void main(String[] args) throws Exception {
Thread t = new Thread(new Thread1(), "线程一");
t.start();
for (int i = 1; i < 6; i++) {
System.out.println(Thread.currentThread().getName() + "输入:" + i);
if (i == 2) {
t.join();
}
Thread.sleep(500);
}
}
}
相关推荐
Zotero+Obsidian+Bookxnote联动让文献阅读丝滑般体验
摘录文字或图片到Obsidian
小明的发明
Problem Description上小学的时候,小明经常自己发明新算法。一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (图见QQ群) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的)...
ArcGIS Pro实战:用时空立方体分析共享单车轨迹数据(含3D可视化技巧)
本文详细介绍了在ArcGIS Pro中利用时空立方体技术分析共享单车轨迹数据的全流程。从数据预处理、构建时空立方体,到执行新兴时空热点分析,并最终实现动态3D可视化,手把手教你挖掘城市骑行活动的时空规律。文章重点解析了工具参数设置、常见报错解决方案,并提供了可复用的Python脚本,助力城市规划与交通研究者高效完成时空模式挖掘。
overlay的用法
这里使用了ogreCore的LoadingOverlay获得Overlay:Overlay* pOverlay = OverlayManager::getSingleton().getByName("Core/LoadOverlay"); 显示Overlay:pOverlay->show(); 隐藏Overlay:pOverlay->hide(); 获得Ove
R语言机器学习算法实战系列(十三)随机森林生存分析构建预后模型 (Random Survival Forest)
本教程运用随机森林生存分析筛选与患者生存状态显著相关特征。该方法借随机森林这一强大机器学习算法,构建多棵决策树并集成结果,以提高生存分析准确性,识别关键生物标志物。接着,利用选定特征构建风险得分,将多个特征转化为单一数值,量化患者风险水平。之后,依据风险得分将患者分为高、低风险亚型,为临床治疗提供个性化指导。最后,通过分析时间依赖的 ROC 曲线评估模型长期预测能力。此曲线计算不同阈值下的真正例率与假正例率,在多个时间点评估,全面展现模型长期稳定性与准确性。
2025_NIPS_Better Tokens for Better 3D: Advancing Vision-Language Modeling in 3D Medical Imaging
近年来,3D医学成像领域的视觉语言建模取得了显著进展,这得益于大规模带配对自由文本报告的计算机断层扫描(CT)语料库、更强大的架构以及高性能预训练模型。这些进展推动了自动报告生成和文本条件3D图像合成等应用的发展。然而,现有方法在处理高分辨率、长序列体积数据时仍面临挑战:对比预训练往往导致视觉编码器与临床语言错位,而基于切片的令牌化会模糊精细解剖结构,降低下游任务的诊断性能。
懒懂事的小明
懒省事的小明 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小明很想吃果子,正好果园果子熟了。在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。小明决定把所有的果子合成一堆。 因为小明比较懒,为了省力气,小明开始想点子了: 每一次合并,小明可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次
Dify使用教程3:Dify创建工作流
Dify使用教程3:Dify创建工作流 接着,我们连接下一个节点:“LLM”填入上下文变量为:result。这时候知识库就添加成功了。添加新节点:结束节点。
NYIST 擅长排列的小明
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。 输入第一行输入整数N(1 每组测试数据第一行两个整数 n
Apache Kylin 命令注入漏洞复现(CVE-2020-1956)
Apache Kylin 中的静态 API 存在安全漏洞,可以将os命令与用户输入字符串连接起来,攻击者可以在Kylin没有任何保护或验证的情况下执行任何os命令。
Vibe Draw:AI实现2D草图转3D建模,开源免费的设计师宝藏软件!
AI实现2D草图转3D建模,开源免费,设计师进来看一下?
Java多线程面试问题集锦
Java多线程面试问题集锦 如果你即将去一家从事大型系统研发的公司进行Java面试,不可避免的会有多线程相关的问题。下面是一些针对初学者或者新手的问题,如果你已经具备良好的基础,那么你可以跳过本文,直接尝试针对进阶水平的Java多线程编程问题及解答。 关联链接: Java multi-threading-1 | Java multi-threading-2
msfvenom制作windows/linux/android/ios木马
msfvenom选项如下 -p, --payload<payload> 指定 payload(攻击荷载)。如果使用自定义payload,请使用'-'或者stdin指定。 -l, --list [module_typel列出指定模块的所有可用资源。模块类型包括:payloads, encoders, nops, all -n, --nopsled <length>为payload预先指定一个NOP滑动长度。 -f, --format <format>指定输出格式(使
Java多线程问答集锦
1、多线程有什么用? 1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了。多核CPU上的多线...
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
SIMATIC S7-1200, S7-1500 PID 控制[手册]
SIMATIC S7-1200, S7-1500 PID 控制[手册]
java多线程面试集锦
1.问题:进程和线程的区别 解答:一个进程对应一个程序的执行,而一个线程则是进程执行过程中的一个单独的执行序列,一个进程可以包含多个线程。线程有时候也被称为轻量级进程. 一个Java虚拟机的实例运行在一个单独的进程中,不同的线程共享Java虚拟机进程所属的堆内存。这也是为什么不同的线程可以访问同一个对象。线程彼此共享堆内存并保有他们自己独自的栈空间。这也是为什么当一个线程调用一个方法时,他的局部
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
想进一线大厂?2021年最详细Java多线程面试问题集锦(含答案),看完可以和面试官扯皮了!
当我刷到这条脉脉的时候,想到当年老板面试我的时候,拿多线程问题虐我时,想想当时太难了。 悄悄给大家看几道阿里必问的面试题,测测能完美的回答几道呢? 有没有一种一定能保证线程安全的代码写法?(偷偷告诉你,真的有!) 多个线程如何保持A1B2C3等顺序交替输出? synchronized volatile的CPU原语是如何实现的? 无锁、偏向锁、轻量级锁、重量级锁有什么差别? 如何正确的启动和停止一个线程? 线程和纤程的区别的是什么?为什么纤程比较轻量级? ThreadLocal有.
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
java多线程 - 面试题集锦(四)
1、什么是进程,什么是线程,为什么需要多线程编程? 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位; 线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。线程的划分尺度小于进程,这使得多线程程序的并发性高;进程在执行时通常拥有独立的内存单元,而线程之间可以共享内存。 使用多线程的编程通常能够带来更好的性能和用户体验,但是多线程的程序对于其他程序是不友好的,因为它可能占用了更多的CPU资源。当然,也不是线程越多
1万+



被折叠的 条评论
为什么被折叠?



