201621123033 《Java程序设计》第11周学习总结
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容。

2. 书面作业
本次PTA作业题集多线程
1. 源代码阅读:多线程程序BounceThread
1.1 BallRunnable类有什么用?为什么代码中需要调用Thread.sleep进行休眠?
该类调用了小球移动的函数,并在移动之后对界面进行重绘。
线程调度,让出CPU给其他线程。
1.2 Ball.java只做了两件事,这两件事分别是什么?BallComponent对象是干什么的?其内部的ArrayList有什么用?程序运行过程中,生成了几个BallComponent对象?该程序使用了多线程技术,每个小球是分别在不同的线程中进行绘制吗?
Ball.java实现了小球的移动和获取小球的物理信息(即大小和坐标)。
BallComponent对象是用来添加小球和画小球,其内部的ArrayList用来放置小球。运行过程中,生成了一个BallCompoent对象。
不是在不同的线程中进行绘制的。
1.3 选做:程序改写:程序运行时,每个小球都是从固定位置出发。如何改写该程序,使得当点击start时,每个小球可以从不同位置出发、以不同的步进移动?
1.4 选做:不同小球的移动轨迹一模一样。改造程序,使得每个小球运行轨迹不完全一样,比如有的可以走余弦轨迹、有的可以走方波轨迹、有的走布朗运动、有的走五角星,等等。
2. 实验总结:题集(多线程)
2.1 题目:Thread、PrintTask、Runnable与匿名内部类。
并回答:a)通过定义Runnable接口的实现类来实现多线程程序比通过继承自Thread类实现多线程程序有何好处?b) 6-1,6-3,6-11实验总结。
a)继承Thread: 线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
优势:
- 适合多个相同代码的线程去处理同一个资源的情况。
- 避免了单继承的局限性。
- 增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
b)
6-1:注意要有有参构造函数,循环打印数字后再打印标识信息(放在循环外)。
6-3:注意匿名内部类书写格式(很容易出现缺括号等等情况)。
6-11:这题基本代码和6-1差不多...就是最后输出标识信息不一样。
2.2 使用Lambda表达式改写6-3
//改写
Thread t1 = new Thread(
()->{
System.out.println(mainThreadName);
System.out.println(Thread.currentThread().getName());
System.out.println(Arrays.toString(Thread.class.getInterfaces()));
}
);
2.3 题目:6-2(Runnable与停止线程)。回答:需要怎样才能正确地停止一个运行中的线程?
使用boolean标志来使线程中的run()方法退出。注意:不要使用stop()方法,因为可能会引发某些问题。
private volatile boolean flag = false;
public void stopMe(){
flag=true;
}
3. 互斥访问
3.1 修改TestUnSynchronizedThread.java源代码使其可以同步访问。(关键代码截图,需出现学号)

4. 互斥访问与同步访问
完成题集6-4(互斥访问)与6-5(同步访问)
4.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法可以使用synchronized实现互斥同步访问,使用代码说明(请出现相关代码及学号)?
//201621123033
class Account1{
private int balance;
private static Lock lock=new ReentrantLock();
public Account1(int balance) {
this.balance = balance;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
public void deposit(int money){
lock.lock();
balance=balance+money;
lock.unlock();
}
public synchronized void withdraw(int money){
lock.lock();
balance=balance-money;
if(balance<0)
throw new IllegalStateException(balance+"");
lock.unlock();
}
}
4.2 同步代码块与同步方法有何区别?
同步方法是在方法名前加synchronized来修饰,同步代码块是在方法内部使用synchronized来实现加锁。由此可看出,同步方法作用范围明显比同步代码块来的大。
4.3 实现互斥访问的原理是什么?请使用对象锁概念并结合相应的代码块进行说明。当程序执行synchronized同步代码块或者同步方法时,线程的状态是怎么变化的?
对共享资源的访问不能同时进行,当一个任务使用共享资源的时候对其上锁,这时其他任务就不能访问这个资源直到其被解锁。
class Counter {
private static int id = 0;
public synchronized static void addId() {
id++;
}
public synchronized static void subtractId() {
id--;
}
public static int getId() {
return id;
}
}
分析如上代码:
- 线程A开始工作,id被上锁,读取id的值为0
- 线程A将id的值+1,此时id的值为1,id被释放
- 线程B开始工作,id被上锁,读取id的值为1
- 线程B将id的值-1,此时id的值为0,id被释放
4.4 Java多线程中使用什么关键字实现线程之间的通信,进而实现线程的协同工作?
- synchronized
- Object类的wait()、notify()
5. 线程间的合作:生产者消费者问题
5.1 运行MyProducerConsumerTest.java。正常运行结果应该是仓库还剩0个货物。多运行几次,观察结果,并回答:结果正常吗?哪里不正常?为什么?

运行结果不正常,显示还有货物剩余。因为Producer和Consumer的存取货速度不一样。
5.2 使用synchronized, wait, notify解决该问题(关键代码截图,需出现学号)


6. 面向对象设计作业-图书馆管理系统
6.1 系统的功能模块表格,表格中体现出每个模块的负责人。
6.2 运行视频
6.3 讲解自己负责的模块,并粘贴自己负责模块的关键代码(出现学号及姓名)。
3.码云及PTA
题目集:多线程
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
必须出现几个要素:提交日期-用户名(姓名与学号)-不提交说明

3.2 截图"多线程"PTA提交列表
需要有两张图(1. 排名图。2.PTA提交列表图)



3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 3 | 547 | 547 | 12 | 12 |
| 5 | 971 | 424 | 20 | 8 |
| 6 | 1577 | 606 | 29 | 9 |
| 7 | 2187 | 1216 | 41 | 21 |
| 8 | 2793 | 606 | 49 | 8 |
| 9 | 3040 | 247 | 56 | 7 |
| 10 | 3617 | 577 | 63 | 7 |
| 11 | 3911 | 294 | 71 | 8 |
| 12 | 4409 | 498 | 82 | 11 |
201621123033 《Java程序设计》第11周学习总结的更多相关文章
- 201521123045 <java程序设计>第11周学习总结
201521123045 <java程序设计>第11周学习总结 1. 本周学习总结 2. 书面作业 2. 书面作业 Q1.1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问 ...
- 201521123027 <java程序设计>第11周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2.书面作业 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchro ...
- 2018面向对象程序设计(Java)第11周学习指导及要求
2018面向对象程序设计(Java)第11周学习指导及要求 (2018.11.8-2018.11.11) 学习目标 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: ...
- 面向对象程序设计(JAVA) 第11周学习指导及要求
2019面向对象程序设计(Java)第11周学习指导及要求 (2019.11.8-2018.11.11) 学习目标 理解泛型概念: 掌握泛型类的定义与使用: 掌握泛型方法的声明与使用: 掌握泛型接 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 2018-2019 2 20175230《Java程序设计》第九周学习总结
<Java程序设计>第九周学习总结 主要内容 MySQL数据库管理系统 1.下载 2.安装 启动MySQL数据库服务器 1.启动 2.root用户 MySQL客户端管理工具 建立连接 建立 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175208 《Java程序设计》第九周学习总结
20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...
- 20175202 《Java程序设计》第九周学习总结
20175202 2018-2019-2 <Java程序设计>第九周学习总结 教材知识点总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称 ...
- 20175227张雪莹 2018-2019-2 《Java程序设计》第九周学习总结
20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...
随机推荐
- deprecate (声明不赞成)
deprecate (声明不赞成) 只是不赞成,不影响使用,或者你升级包 解决:update to 高版本 npm update [-g] [<pkg>...]
- [HAOI2007]上升序列(最长上升子序列)
题目描述 对于一个给定的 S=\{a_1,a_2,a_3,…,a_n\}S={a1,a2,a3,…,an} ,若有 P=\{a_{x_1},a_{x_2},a_{x_3},…,a_{x_m}\ ...
- 寻找AP数
题目背景 正整数n是无穷的,但其中有些数有神奇的性质,我们给它个名字--AP数. 题目描述 对于一个数字i是AP数的充要条件是所有比它小的数的因数个数都没有i的因数个数多.比如6的因数是1 2 3 6 ...
- BZOJ3277: 串(广义后缀自动机)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1196 Solved: 478[Submit][Status][Discuss] Descripti ...
- 判断Map集合中是否存在某一个key
方法一: Map<String,String> hashmp = ne HashMap(); hashmp.put("aa", "111"); ha ...
- VMware虚拟化NSX-Manager命令行更改admin用户密码
1.1 登录到NSX-Manager命令行界面,输入用户名和密码登录到用户模式 Log in to the vSphere Client and select an NSX virtual ap ...
- Linux系统运维基础测试题
1 Linux运维基础测试题(第一关) 通过这段时间学习Linux基础命令,为了检测自己对Linux基础命令掌握的情况,从网上整理13到测试题,并将其整理出来供大家参考学习. 1.1 习题 ...
- Mysql升级过程的问题
升级安装5.6版本mysql linux环境下的yum默认mysql版本是5.1的,由于项目需要保存表情等4个字节的数据,版本受限,需要升级到5.6版本支持utf8mb4格式的编码. 升级过程大概就是 ...
- vue路由回退判断
在页面一开始加上一个全局的函数: activated: function () { this.$setgoindex() } 这个函数是这样的,判断当前页面的历史记录是不是小于等于1,如果小于等于1, ...
- 一道SQL面试题——表行列数据转换(表转置)
SQL语句如下: select country, sum(case when type='A' then money end) as A, sum(case when type='B' then mo ...