集美大学 计算机 郑如滨

教学博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

第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相比,其优点如何?

posted on 2025-11-18 09:43  zhrb  阅读(0)  评论(0)    收藏  举报