阅读《Java多线程编程核心技术》线程间通信时遇到的一个问题,求解
package com.qf.test01;
import java.util.ArrayList;
import java.util.List;
/**
* @author qf
* @create 2018-09-13 17:47
*/
public class MyList {
private List list = new ArrayList();
public void add(){
list.add("qf");
}
public int size(){
//System.out.println("MyList.size:"+list.size());
return list.size();
}
}
}=============================
package com.qf.test01;
/**
* @author qf
* @create 2018-09-13 17:45
*/
public class ThreadA extends Thread {
private MyList myList;
public ThreadA(MyList myList) {
this.myList = myList;
}
@Override
public void run() {
try {
System.out.println("a run");
for (int i = 0; i < 10; i++) {
myList.add();
System.out.println("添加了"+(i+1)+"个元素");
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
=============================
package com.qf.test01;
/**
* @author qf
* @create 2018-09-13 17:45
*/
public class ThreadB extends Thread {
private MyList myList;
public ThreadB(MyList myList) {
this.myList = myList;
}
@Override
public void run() {
try {
System.out.println("b run");
while (true){
if(myList.size() == 5){
System.out.println("线程b要退出了");
throw new InterruptedException();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
=============================
package com.qf.test01;
/**
* @author qf
* @create 2018-09-14 9:23
*/
public class Test {
public static void main(String[] args) {
MyList list = new MyList();
ThreadA a = new ThreadA(list);
a.setName("a");
a.start();
ThreadB b = new ThreadB(list);
b.setName("b");
b.start();
}
}
---------------------------------------------------------------------------------------------------------
上面代码运行结果:
a run
添加了1个元素
b run
添加了2个元素
添加了3个元素
添加了4个元素
添加了5个元素
添加了6个元素
添加了7个元素
添加了8个元素
添加了9个元素
添加了10个元素
-----------------------------------------------------------------------------------------------------------
想问下,为什么b线程中设置抛异常的语句没有执行?
相关推荐
Java 多线程编程核心技术
这是一本关于Java多线程编程的入门书籍,通过快速理解并掌握多线程技术,可以帮助你更好地利用Java进行高效的并发处理,提升应用的响应速度、并发能力和吞吐量。2. 本书从线程的创建、启动、停止、同步、等待/通知机制、线程间通信、线程池等方面详细介绍了多线程开发中常用的技术。3. 如果读者是第一次接触多线程编程或者需要快速学习一些基础知识的话,那么这本书绝对是一个不错的选择!4. 本书适合于具有一定Java编程经验的工程师阅读。第一章 Java多线程概述第二章 Java线程的实现方式。
【雷达信号处理】数字下变频(DDC)(Matlab代码实现)
内容概要:本文详细介绍了《【雷达信号处理】数字下变频(DDC)(Matlab代码实现)》这一技术资源,聚焦于数字下变频(DDC)在雷达信号处理中的核心作用与实现方法。内容系统阐述了DDC的基本原理,包括混频、低通滤波和抽取等关键步骤,如何将高频回波信号高效转换为便于后续处理的基带信号。文档提供了完整的Matlab代码实现方案,涵盖算法设计、参数设置与仿真验证全过程,有助于深入理解DDC在实际雷达系统中的应用。此外,资源还关联了时频特征匹配、多体制信号处理等相关技术方向,体现了其在现代雷达信号处理体系中的综合价值。; 适合人群:具备信号与系统、数字信号处理基础知识的研究生、科研人员及从事雷达、通信、电子工程等领域的工程技术人员。; 使用场景及目标:① 深入学习数字下变频(DDC)的工作原理及其在雷达系统中的具体实现;② 利用Matlab开展雷达信号处理算法的仿真实验与性能分析;③ 支持课程项目、科研课题开发或学术论文复现等任务,提升理论与实践结合能力。; 阅读建议:建议结合Matlab环境动手运行并调试所提供的代码,对照理论推导理解各模块功能;同时可参考文档中提及的相关信号处理技术,拓展对雷达系统整体架构的认知。
科技中介服务机构如何构建差异化的服务能力与竞争优势?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
高校技术转移办公室人员如何利用AI工具高效管理科技成果与技术经纪人对接工作?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
【AI大模型毕业设计】LLM大模型 基于LangChain美食菜谱分享网站+AI智能助手(FastAPI+Vue3) 完整版 源码+sql脚本+论文
这个是完整源码 【AI大模型毕业设计】LLM大模型 基于LangChain美食菜谱分享网站+AI智能助手(FastAPI+Vue3) 完整版 源码+sql脚本+论文 数据库是mysql 菜谱信息分散在短视频、社交平台和零散网页中,家庭烹饪者往往只能看到结果,却难以按食材、口味和步骤核对一份可执行的做法。与此同时,通用对话模型能够组织语言,却容易编造用量和火候。把经过人工审核的菜谱整理成可检索的知识,再让对话模型依据这些资料回答问题,能够同时保留社区分享和可核对的依据。 本文设计并实现了带AI智能助手的美食菜谱分享网站。系统采用前后端分离结构:前端使用 Vue3、Vue Router、Pinia 和 Element Plus 构建前台门户与管理后台,后端使用 Python 和 FastAPI 提供菜谱、互动、审核和统计接口,业务数据保存在 MySQL 数据库 db_recipe 中。智能问答遵循检索增强生成的思路,与 LangChain 中检索器、提示模板、对话记忆和流式回调所描述的链路一致;考虑到审核状态、权限和流式输出需要与业务服务紧密配合,本系统用 Python 显式完成文档拼装、向量写入、相似度检索和提示词组装,向量存放在 Chroma 中,嵌入与对话通过兼容接口调用通义千问。 网站提供注册登录、菜谱浏览检索、发布与审核、点赞收藏评论、公告轮播、个人中心,以及依据站内菜谱进行的流式问答。管理端可以维护用户、分类、评论和知识库,并在首页用图表查看用户规模、菜谱分类和近七日趋势。测试围绕账号、审核、互动和问答四类路径展开,结果表明主要功能能够按设计完成,回答可以回指相关菜谱。


Java SE
