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

郑老师 老师 2022-11-08 07:46:43
加精

第十二周 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时,两个程序运行起来有何不同?为什么?
    • 多线程-Bounce代码.zip 4.68K
  5. 思考:两个人只有一双筷子(用A、B分别表示这双筷子的两只),这两个人只有各自获A、B这两只筷子的候才能成功吃饭。可以想象,他们会产生冲突。尝试说明他们可能产生哪些冲突?怎么解决这些冲突?

2.实验

实验链接:https://www.cnblogs.com/zhrb/p/6762488.html
PTA题集:多线程。

提前完成PTA题集中6-1至6-4中至少两题,可联系老师加分。

3.作业

本周作业主要以完成实验内容为主。请尝试完成"PTA题集:多线程"中的程序填空题函数题6-1至6-6

课后思考

  1. 简述你的面向对象设计大作业中,哪些任务可以并发或并行的执行。
  2. 使用多线程改造你的面向对象大作业。比如,可以允许两个以上的人使用同一个账号操作同一个购物车进行添加、删除等操作,在这里临界资源是什么。类似:某些餐厅的微信扫码点餐允许多个人同时点菜。

代码索引

代码详见群文件。

说明代码
继承自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

课外拓展

Introduction - 深入浅出Java多线程 (gitbook.io)

项目文件名
使用原子变量解决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
...全文
643 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
0人已提交
完成率0%
暂无数据
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-Java 发布问题, 以便更快地解决您的疑问

4,038

社区成员

发帖
与我相关
我的任务
社区描述
为初学Java的大学生提供一个学习、交流的社区。 社区包括:技术文章、学习任务、在线课程、在线编程练习。
javajava-eeeclipse 高校
社区管理员
  • zhrb
  • 驼同学.
  • 兰翔呀
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

社区板块说明:
1. Java技术:包含Java技术的各种新闻、文章。
2. 教学频道:包含Java基础技术与Java教学中常用的一些文章。建议初学者、在线学习的同学在这里交流、提问、浏览课程学习相关文章。
3. 学习任务:老师发布的教学任务。
4. 其他技术:其他技术文章。

社区链接说明:
1. 在线学习:本社区对应的在线课程(免费学习)。
2. 编程练习:本社区使用的在线编程练习平台(加入在线课程后,免费练习)。
3. 项目实例:一个简单的Java项目示例。
 

试试用AI创作助手写篇文章吧