惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 最新话题
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
月光博客
月光博客
博客园 - 叶小钗
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
量子位
美团技术团队
Vercel News
Vercel News
Y
Y Combinator Blog
IT之家
IT之家
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
腾讯CDC
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
博客园 - 司徒正美
N
Netflix TechBlog - Medium
S
Schneier on Security
博客园 - 聂微东
U
Unit 42
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
Latest news
Latest news

博客园 - zhrb

使用 OpenCode+DeepSeek 进行Java编程 使用AI辅助编写报告的建议 Windows命令行简易入门 2026-适合初学者的"Windows+OpenClaw(小龙虾)+DeepSeek+飞书、QQ、微信"的安装与使用 AI驱动:90分钟Maven项目实战入门 第14周 预习、实验与作业:Java JDBC编程 第13周 预习、实验与作业:Java网络编程 基于AI辅助的Java程序设计贯穿式教学案例 第11周 预习、实验与作业:Java I/O流与文件 第10周 预习、实验与作业:异常处理机制 使用AI帮你写Java程序 第09周 预习、实验与作业:Java集合框架 第08周 预习、实验及作业:Java GUI编程 使用AI编写Java GUI程序的入门指南(Powered by DeepSeek) 第07周 期中复习(面向对象部分) 第06次 预习、实验与作业:接口与嵌套类 第05周 预习、实验与作业:继承与多态 第04周 预习、实验与作业:类的设计与继承 第03周 预习、实验与作业:面向对象入门2与类的识别 第02周 预习、实验与作业:Java基础语法2、面向对象入门
第12周 预习、实验与作业:Java并发编程
zhrb · 2025-11-18 · via 博客园 - zhrb

第12周 预习、实验与作业:Java并发编程

1. 预习

简易预习流程:先完成预习课件。然后思考如下课前问题列表中的问题。注意:可根据需要观看线上课程视频。

1.1 学习目标

  1. 理解进程、线程、临界资源、同步访问等基本概念。掌握Thread、Runnable、syncrhonized的使用,理解线程的生命周期。
  2. 理解Java并发编程的线程互斥与线程同步问题。能编写基本的互斥与同步代码。
  3. 了解线程池和Java并发编程的一些辅助工具类。

1.2 预习任务

预习课件(两份)。

1.3 课前问题列表

  1. 以前你编写的Java程序同时能做几件事情?有几个执行流程?main方法执行完,整个程序一定会退出吗?
  2. 早期的电脑一般是单核CPU,但那时我们就可以在编写程序的同时听歌,你觉得其CPU可以同时执行两个程序的指令吗?如果不能,为什么我们可以边写程序边听歌?
  3. 打开“资源监视器”观察你使用的QQ、浏览器或者WPS,一般有几个线程?思考一下,当你运行这些程序的时候,有哪些现象证明了这些程序使用了多个线程?
  4. 运行移动中的小球中的“Bounce”与"BounceThread"。当你多次点击Start时,两个程序运行起来有何不同?为什么?
  5. 思考:两个人只有一双筷子(用A、B分别表示这双筷子的两只),这两个人只有各自获A、B这两只筷子的候才能成功吃饭。可以想象,他们会产生冲突。尝试说明他们可能产生哪些冲突?怎么解决这些冲突?

2.实验

  1. 实验链接:https://www.cnblogs.com/zhrb/p/6762488.html
  2. PTA题集:多线程。
    • 提前完成PTA题集中6-1至6-4中至少两题,可联系老师加分。

3.课后任务(作业)

本周作业主要以完成实验内容为主。

3.1 PTA编程

PTA题集:多线程"中的程序填空题函数题6-1至6-6

3.2 在线学习平台

限时完成:章节测验8(文件与流)

3.3 课后

  1. 使用多线程改造你的面向对象大作业。比如,可以允许两个以上的人使用同一个账号操作同一个购物车进行添加、删除等操作,在这里临界资源是什么。类似:某些餐厅的微信扫码点餐允许多个人同时点菜。
  2. 课程设计初步选题
    • 本次面向对象综合程序设计实践可选择Python或者Java。选择Python的可联系Python课程老师获取题目。
    • 历年师兄师姐的作品Java课程设计(2023版)
    • 前期任务:可先进行预组队,然后尝试选题(建议可在AI的帮助下进行选题)。建议完成一些实用性较强、可以利用第三方库或者第三方平台API的任务。

3.4 本章参考代码索引

参考代码详见群文件。
并发编程基础参考代码:

说明 代码
继承自Thread实现多线程 FirstThread.java
main线程线程 HelloWorldMainThread.java
实现Runnable接口实现多线程 FirstRunnable.java
使用匿名类、Lambda表达式简化多线程编写 ThreadTest.java
任务与线程相分离 AddTask.java
演示sleep、yield与join方法 SleepYieldJoinTest.java
使用interrupt方法中断线程 InterruptTest
使用标志位中断线程 ThreadStopTest.java
守护线程 DaemonTest.java
未使用互斥导致线程冲突 UnSynchronizedThreadTest.java
使用syncrhonized修饰方法解决线程冲突问题 testSync/SynchronizedThreadTest.java

并发编程进阶参考代码:

项目 文件名
使用原子变量解决 testSync/SynchronizedThreadAtomicTest.java
synchronized语句块解决细粒度同步问题 testSync/SyncPairCounter.java
volatile关键字 testSync/VolatileTest.java
死锁演示 testSync/ChopStickDeadLock.java
生产消费者1-未解决 ProducerConsumerV1.java
生产消费者2-使用while与wait、notify解决同步问题 ProducerConsumerV2.java
Lock对象演示 testSync/SyncCounterWithLock.java
使用Lock解决死锁 testSync/ChopStickWithLock.java
使用Lock与Condition解决同步问题 testSync/ProducerConsumerWithLock.java
Executor与ExecutorService:使用执行器与线程池 ExecutorServiceTest.java
Callable:有返回值的任务 CallableTest.java
ForkJoinPool:分而治之 threadTest/FindInArrTask.java、FindMaxTask、ExecutorServiceTest.java中的testForkJoinPoolTest
CountDownLatch:同步辅助类 testSync/CountDownLatchTest.java
BlockingQueue:阻塞队列 testSync/ProducerConsumerBlockingQueue.java
Process与ProcessBuilder:控制进程 ProcessTest.java

拓展

询问AI:给我一个简单的Java使用执行器与线程池的示例。并说明和直接使用Thread相比,其优点如何?