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

2. 书面作业
本次PTA作业题集多线程
1. 互斥访问与同步访问
完成题集4-4(互斥访问)与4-5(同步访问)
1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步访问(请出现相关代码)?
在Java中,提供了两种方式来实现同步互斥访问:synchronized和Lock
class Account{
private int balance;
private Lock poolLock = new ReentrantLock();
private Condition condition = poolLock.newCondition();
public Account(int balance) {
super();
this.balance = balance;
}
public int getBalance() {
return balance;
}
public void deposit(int money){
poolLock.lock();
try{
this.balance=getBalance() + money;
condition.signal();
}
finally
{
poolLock.unlock();
}
}
public void withdraw(int money){
poolLock.lock();
try{
while (getBalance() <money) {
try {
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.balance=getBalance() - money;
condition.signal();
}
finally{
poolLock.unlock();
}
}
}
1.2 同步代码块与同步方法有何区别?
同步方法是在原子操作的程序代码前添加synchronized关键字,
public static synchronized void addld(){
id++;
}
同步代码块是在方法中添加synchronized代码块,如:
public static void addld(){
synchronized(Counter.class){//synchronized(syncObject),syncObject==上锁对象
id++;
}
}
synchronized块其中的代码必须获得对象syncObject(可以是类实例或类)的锁方能执行。
1.3 实现互斥访问的原理是什么?请使用对象锁概念并结合相应的代码块进行说明。当程序执行synchronized同步代码块或者同步方法时,线程的状态是怎么变化的?
互斥访问的原理:资源配给任务使用时,在其上加锁。如果想访问某项资源的任务必须锁定这种资源,使其他任务无法访问它直至这个资源被解锁,即没有对象锁的对象只能进入Lock pool等待线程结束,然后再和其他对象竞争锁,有锁才能执行,并且一次只允许一个线程使用该资源,直到所有线程结束。
1.4 Java多线程中使用什么关键字实现线程之间的通信,进而实现线程的协同工作?为什么同步访问一般都要放到synchronized方法或者代码块中?
Object的wait()、notify()可以用来实现线程之间的协作,另外还有await()等。 同步访问一般都要放到synchronized方法是为了防止多个线程访问同一资源所引起的冲突。
2. 交替执行
实验总结(不管有没有做出来)
要有一个标志boolean值来判断执行哪块代码。因为是两个线程交替执行,线程之间需要相互协作,所以使用了wait,notify,还有flag标志机制来实现。getSize()方法返回任务为完成的数量,当所有任务都完成后结束程序。
3. 互斥访问
3.1 修改TestUnSynchronizedThread.java源代码使其可以同步访问。(关键代码截图,需出现学号)
3.2 进一步使用执行器改进相应代码(关键代码截图,需出现学号)
参考资料:Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask
4. 线程间的合作:生产者消费者问题
4.1 运行MyProducerConsumerTest.java。正常运行结果应该是仓库还剩0个货物。多运行几次,观察结果,并回答:结果正常吗?哪里不正常?为什么?
多运行几次后发现仓库所剩货物不为0:
生产者的生产速度和消费者的取货速度不一致,线程之间没有合作,就出现混乱。
4.2 使用synchronized, wait, notify解决该问题(关键代码截图,需出现学号)
4.3 选做:使用Lock与Condition对象解决该问题。
5. 查询资料回答:什么是线程安全?(用自己的话与代码总结,写自己看的懂的作业)
如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全。
6. 选做:实验总结
201521123105 第11周Java学习总结的更多相关文章
- 201521123105 第8周Java学习总结
1.本周学习总结 1.1思维导图 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 1.删除元素的时候从最后一个元素开始,避免删除元素后位置发生变化而导致 ...
- 201521123105 第七周Java学习总结
1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 以下是ArrayList的contains源代码: public boole ...
- 201521123105 第三周Java学习总结
1. 本周学习总结 对象(实际个体) 对象与类 类(模板) 2.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private ...
- 201521123105 第10周Java学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-21.1 截图你的提交结果(出现 ...
- 201521123105 第六周Java学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法1.1 Object对象 ...
- 201521123105 第9周Java学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避 ...
- 20165203《Java程序设计》第七周Java学习总结
20165203<Java程序设计>第七周Java学习总结 教材学习内容总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称MySQL,是世 ...
- 20165236 第六周Java学习总结
20165236 第六周Java学习总结 一. 第八章内容: 1.String 类: String对象.常量对象:字符串并置: 常用方法: length,equals,startsWith,compa ...
- 第五周Java学习总结(补)
第五周java学习内容(补) 学习内容: File类方法的操作 public String getName() public boolean canRead() public boolean canW ...
随机推荐
- Hibernate(二)
1.1Hibernate的持久化类状态 1.1.1Hibernate的持久化类状态 持久化类:就是一个实体类和数据库表建立了映射关系. Hibernate为了方便的管理持久化类,将持久化类分成了三种状 ...
- MySQL连接问题【如何解决MySQL连接超时关闭】
--MySQL连接问题[如何解决MySQL连接超时关闭] ------------------------------------------------转载 最近做网站有一个站要用到WEB网页采集器 ...
- 用netstat查看网络状态详解
--用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态: ...
- VBS windows监控
http://bbs.csdn.net/topics/230078112'/************************************************************** ...
- Java 脚本引擎
脚本引擎,就是一个编程语言的解释器,它的功能是解释执行用户的程序文本,将它译成计算机能执行的机器代码,完成一系列的功能. Java脚本引擎简单地说就是指Java提供的一组兼容操作各种脚本语言的的API ...
- 如何使用python来模拟鼠标点击(将通过实例自动化模拟在360浏览器中自动搜索"python")
一.准备工作: 安装pywin32,后面开发需要pywin32的支持,否则无法完成与windows层面相关的操作. pywin32的具体安装及注意事项: 1.整体开发环境: 基于windows7操作系 ...
- vector中删除第k个元素的巧妙方法
假设我们定义了一个vector如下: vector<int> v;v.push_back(1);...v.push_back(255); 如果要删除第k个元素的话,应该这样写: (1)如果 ...
- PCA主成分分析
特征降维就是降低特征矩阵维数,减少噪声和冗余,减少过度拟合. Principal factor analysis简称PCA,其思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征.这k ...
- volatile可见性的一些认识
一.前言 volatile的关键词的使用在JVM内存模型中已是老生常谈了,这篇文章主要结合自己对可见性的一些认识和一些直观的例子来谈谈volatile.文章正文大致分为三部分,首先会介绍一下happe ...
- 2017多校第10场 HDU 6171 Admiral 双向BFS或者A*搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6171 题意: 给你一个高度为6的塔形数组,你每次只能将0与他上下相邻的某个数交换,问最少交换多少次可以 ...