201521123010 《Java程序设计》第11周学习总结
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容。
2. 书面作业
本次PTA作业题集多线程
①互斥访问与同步访问
完成题集4-4(互斥访问)与4-5(同步访问)
1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步访问(请出现相关代码)?
A:
可以使用Lock对象和Condition对象来实现。
1.2 同步代码块与同步方法有何区别?
A:
从字面上来看,同步代码块用于整个代码块,而同步方法用于整个方法。同步代码块是有
synchronized
关键字修饰的语句块,被该关键字修饰的语句块会自动被加上内置锁,从而实现同步,而使用时synchronized
关键字是在方法中引用。而同步方法是有synchronized
关键字修饰的方法,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态,而使用时synchronized
关键字是在void前定义。
1.3 实现互斥访问的原理是什么?请使用对象锁概念并结合相应的代码块进行说明。当程序执行synchronized同步代码块或者同步方法时,线程的状态是怎么变化的?
A:
首先我们知道互斥访问的定义是当两个或两个以上的线程需要同时对统一数据存取,若线程之间不加以控制,会产生竞争,这样的情况下我们必须学会互斥存取,而互斥访问是一种手段。而其原理结合对象锁为,对象需有对象锁才能进行线程,当执行任务时给其加锁,直到解锁前其他对象无法使用,一对象进行一资源的模式。
用 synchroined关键字修饰方法举例:
public synchronized void duixianglock()
{
System.out.println("duixianglock---in");
try
{
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("duixianglock---out");
}
状态变化为:多个线程运行 ——> 一个线程得到对象锁,其余线程等待 ——> 当前线程解锁,其余线程竞争 ——> 以此类推,直到所有线程运行结束。
1.4 Java多线程中使用什么关键字实现线程之间的通信,进而实现线程的协同工作?为什么同步访问一般都要放到synchronized方法或者代码块中?
A:
一般使用
wait()
关键字和notify()
关键字来实现。因为在多线程的情况下,同一进程的多个线程实际共享了同一片存储空间,虽然方便,但也会有访问冲突的问题。如果用synchronized
关键字就可以有效避免同一个数据对象被多个线程同时访问。
②交替执行
实验总结(不管有没有做出来)
A:
截图Worker1代码。实验总结:这道题主要是在Worker1和Worker2类的编写,要使其继承Runnable接口。若是两个线程交替运行,需要使用wait()和notify()函数,还要在方法或代码块中加入synchronized关键字。过程中碰到的问题是不熟悉wait()和notify()函数,所以以另种方法来写。
③互斥访问
3.1 修改TestUnSynchronizedThread.java源代码使其可以同步访问。(关键代码截图,需出现学号)
3.2 进一步使用执行器改进相应代码(关键代码截图,需出现学号)
参考资料:Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask
④线程间的合作:生产者消费者问题
4.1 运行MyProducerConsumerTest.java。正常运行结果应该是仓库还剩0个货物。多运行几次,观察结果,并回答:结果正常吗?哪里不正常?为什么?
A:
多运行几次后可得到出现以上两种结果。不正常,因为代码中没有实现线程之间通信的关键字,故线程之间没有合作,就会产生错乱。
4.2 使用synchronized, wait, notify解决该问题(关键代码截图,需出现学号)
⑤查询资料回答:什么是线程安全?(用自己的话与代码总结,写自己看的懂的作业)
A:
线程安全:就是若你的代码有多个线程在同时运行,而这些线程也可能会同时运行这段代码。那么,假如多个线程每次运行得结果和单线程运行的结果相同,并且其他的变量的值也和预期的得相同的话,那此时就为线程安全。
3. 码云上代码提交记录
题目集:多线程(4-4到4-10)
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图多线程PTA提交列表
201521123010 《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 若下载的是 ...
随机推荐
- CSS3基础(4)——CSS3 渲染属性
一. CSS3 计数器详解 CSS3计数器(CSS Counters)可以允许我们使用CSS对页面中的任意元素进行计数,实现类似于有序列表的功能. 与有序列表相比,它的突出特性在于可以对任意元素 ...
- MATLAB实现聚类
%% Cluster x = data; % 传入数据 [h, w] = size(x); num_cluster = 12; % 聚类数 T = clusterdata(x, num_cluster ...
- 剑指OFFER——顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8 ...
- js添加删除元素内容
<body> <div id="div" style="background: yellow;width:200px;height:200px;&quo ...
- windows重装后,不重装oracle,直接恢复数据库
windows重装后,不重装oracle,让原来的库可用的问题环境: windows 7/Oracle 11.2.0.1.0 64位 原来的Oracle安装在D盘.重装只格式化了C盘 1.修改注册表 ...
- 常用perl脚本工具
1.批量添加license:PrefixLicense.pl (1)给单一c/c++源文件添加license: perl PrefixLicense.pl apache_license src_fil ...
- 如何改变Myeclipse编辑区背景色(转)
编辑窗口右键单击-->Preferences-->General加号-->Editors加号-->点Text Editors字样-->右下窗口选Backgroud col ...
- Vue 实例中的生命周期钩子
Vue 框架的入口就是 Vue 实例,其实就是框架中的 view model ,它包含页面中的业务处理逻辑.数据模型等,它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻 ...
- APUE 2 - 进程组(process group) 会话(session) job
进程组(process group) 进程组顾名思义是指一个或多个进程的集合.他们通常与同一个job(可以从同一个终端接收信号)相关联.每个进程组拥有一个唯一的Process Group Id.可以使 ...
- 一周中的后两天 笔记(网路基础 Python基础)
网络基础 (统一的协议) 一, 计算机之间通过物理介质(网络设备)连接在一起 二, 计算机之间基于网络协议通信 tcp/ip五层 应用层: 传输层:tcp/udp协议 找到对应的软件 一个 ...