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

2. 书面作业
本次PTA作业题集多线程
1.互斥访问与同步访问
完成题集4-4(互斥访问)与4-5(同步访问)
1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步访问(请出现相关代码)?

1.2 同步代码块与同步方法有何区别?
答:同步方法作用于整个方法,同步代码块作用于整个代码块而已。同步方法直接在方法上加synchronized实现加锁,而同步代码块在方法内部加锁。同步代码块可以选择以什么来加锁,比同步方法要更细。
1.3 实现互斥访问的原理是什么?请使用对象锁概念并结合相应的代码块进行说明。当程序执行synchronized同步代码块或者同步方法时,线程的状态是怎么变化的?
答:线程中对象持有对象锁,其余线程无对象锁而在后续排队中,等待该线程结束后,其他线程竞争对象锁后再运行线程,线程进行资源操作的时候,对资源享有独占性,高优先级的线程享有优先的资源,
其余线程以此类推直至所有线程运行完毕。
1.4 Java多线程中使用什么关键字实现线程之间的通信,进而实现线程的协同工作?为什么同步访问一般都要放到synchronized方法或者代码块中?
答:使用wait (),notify()和notifyAll()关键字实现线程之间的通信,进而实现线程的协同工作。防止多个线程访问同一资源所引起冲突,让每个程序需要按照顺序使用资源,避免了争抢。
2.交替执行
实验总结(不管有没有做出来)
答:需要用到wait()、notify(),还在研究还未完成。
3.互斥访问
3.1 修改TestUnSynchronizedThread.java源代码使其可以同步访问。(关键代码截图,需出现学号)

3.2 进一步使用执行器改进相应代码(关键代码截图,需出现学号)
参考资料:Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask
关键代码如下
ArrayList<Callable<Object>> a=new ArrayList<>();
ExecutorService b=Executors.newCachedThreadPool();
for(int j=0;j<3;j++)
{
a.add(Executors.callable(new.Adder()));
}
for(int j=0;j<3;j++)
{
a.add(Executors.callable(new.Subtracter()));
}
b.invokeAll(a);
System.out.println(Counter.getId());
System.out.println("main end");
4.线程间的合作:生产者消费者问题
4.1 运行MyProducerConsumerTest.java。正常运行结果应该是仓库还剩0个货物。多运行几次,观察结果,并回答:结果正常吗?哪里不正常?为什么?
答:不正常,,在public synchronized void add(String t)和public synchronized void remove()的方法体缺少wait()和notify()函数
导致只是不互斥,而无合作,使进出统计存取数据不同步。
4.2 使用synchronized, wait, notify解决该问题(关键代码截图,需出现学号)
部分代码请教同学
public synchronized void add(String t){
try{
while(repo.size() >= capacity){
wait();
System.out.println("仓库已满!无法添加货物。");
}
}catch(Exception e){
System.out.println(e);
}
repo.add(t);
notifyAll();
}
public synchronized void remove(){
try{
while(repo.size() <= 0){
wait();
System.out.println("仓库无货!无法从仓库取货");
}
}catch(Exception e){
System.out.println(e);
}
repo.remove(0);
notifyAll();
}//21
5.查询资料回答:什么是线程安全?(用自己的话与代码总结,写自己看的懂的作业)
答:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
3. 码云上代码提交记录
题目集:多线程(4-4到4-10)
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 截图多线程PTA提交列表

Java第十一周学习总结的更多相关文章
- JAVA 第十一周学习总结
20175308 2018-2019-2 <Java程序设计>第十一周学习总结 教材学习内容总结 13.1 URL类: URL类是java.net包中的一个类,用URL创建的对象可以获取U ...
- 201521123093 java 第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- 201521123061 《Java程序设计》第十一周学习总结
201521123061 <Java程序设计>第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 本周学习的是如何解决多线程访问中的互斥 ...
- 201521123072《java程序设计》第十一周学习总结
201521123072<java程序设计>第十一周学习总结 1. 本周学习总结 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问 ...
- 201521123038 《Java程序设计》 第十一周学习总结
201521123038 <Java程序设计> 第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多 ...
- 杨其菊/常惠琢《面向对象程序设计(java)》第十一周学习总结
<面向对象程序设计>第十一周学习总结 第一部分:理论知识 JAVA的集合框架 JAVA的集合框架实现对各种数据结构的封装,以降低对数据管理与处理的难度. 所谓框架就是一个类库的集合,框 ...
- “2017面向对象程序设计(Java)第十一周学习总结”存在问题的反馈及教学安排
“2017面向对象程序设计(Java)第十一周学习总结”存在问题的反馈及教学安排1.“提出表扬的同学:姜依萍,王雪玲,徐楠,相文君,赵晓未提交作业的同学:任红强,王瑞强,宗鹏新,扎西才让,布旦刀杰,范 ...
- 20172325 2017-2018-2 《Java程序设计》第十一周学习总结
20172325 2017-2018-2 <Java程序设计>第十一周学习总结 教材学习内容总结 Android简介 Android操作系统是一种多用户的Linux系统,每个应用程序作为单 ...
- 20172330 2017-2018-1 《Java程序设计》第十一周学习总结
20172330 2017-2018-1 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 本周的学习内容为集合 Android简介 Android操作系统是一种多用户的Linux ...
随机推荐
- SSH服务(一)
一.初始SSH SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的 ...
- SpringMVC详解(三)------基于注解的入门实例
前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能 ...
- Selenium发展史
Jason Huggins在2004年发起了Selenium项目,当时身处ThoughtWorks的他,为了不想让自己的时间浪费在无聊的重复性工作中,幸运的是,所有被测试的浏览器都支持Javascri ...
- Win7常用快捷键整理
Win7常用快捷键整理.. -------------------- Win + Pause:显示系统属性对话框 ------------------------------------ Win7系统 ...
- 使用php下载的文件打不开,自己用着没问题,客户用就不行?
1 现象: 开发的时候用的好好的文件下载功能,部署到客户那边就不好使了,几乎所有从服务器下载下来的文件都不能打开. 比较了上传前的文件.上传后服务器端的文件.下载后本机的文件,发现同一个文件,上传后还 ...
- JAVA奇技淫巧简化代码之lombok
背景 最近在做一个小功能,又不想在原有体态臃肿的项目中追加,为了调试方便并且可以快速开发就采用了springboot.由于使用了JPA,建了几个类,然后通过IDE去生成其属性的构造器.getter.s ...
- ssh框架知识点回顾
=========================================================================================== ======== ...
- kettle使用正则表达式动态获取excel表
- 我的Markdown的利器——Markdown Here、有道云笔记、iPic
Markdown逐渐成为大家文章编辑的首选,这里推荐两个比较冷门的Markdown工具. 用什么当做Markdown的主力工具? 网上有很多人推荐的Markdown的工具包括专业的Markdown工具 ...
- jackjson和fastjson进行Bean与json互换
1.jackjson 1.bean到json ObjectMapper m = new ObjectMapper(); String value = m.writeValueAsString(bean ...