1. 本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容。

2. 书面作业

1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问)

1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步访问(请出现相关代码)?

还可以使用Lock对象和Condition对象实现互斥同步访问

 public synchronized void deposit(int money){
lock.lock();
try{
this.balance=this.getBalance()+money;
}finally{
lock.unlock();
}
} public void withdraw(int money){
lock.lock();
try{
try{
while(this.getBalance()<=0)
condition.await();
condition.signal();
}catch(Exception e){
System.out.println(e);
}
this.balance=this.getBalance()-money;
if(balance<0)
throw new IllegalStateException(balance+"");
}finally{
lock.unlock();
}
}

1.2 同步代码块与同步方法有何区别?

1.格式不同,同步代码块主要是在方法中使用synchronized关键字实现互斥public void 方法名{ synchronized(类对象名T) {//同步代码块} };同步方法是在定义方法时,加在void前,public synchronized void 方法名{//同步代码块} 2.作用不同

1.3 实现互斥访问的原理是什么?请使用对象锁概念并结合相应的代码块进行说明。当程序执行synchronized同步代码块或者同步方法时,线程的状态是怎么变化的?

 原理:当资源被一个任务使用时,在其上加锁。现在在访问某项资源的任务必须锁定这种资源,使其他任务无法访问它直至这个资源被解锁。在其被解锁时,就会有另一个任务可以锁定并且使用该资源,以此类推。 状态:多个线程运行->多个线程竞争对象锁->一个线程获得对象锁运行,其余等待->一个线程结束,其余线程竞争对象锁->直到所有线程运行结束。

1.4 Java多线程中使用什么关键字实现线程之间的通信,进而实现线程的协同工作?为什么同步访问一般都要放到synchronized方法或者代码块中?

java多线程中使用wait()和notify()/nofityAll()来实现线程之间的通信;同步访问放到synchronized方法或者代码块中是为了防止多个线程访问同一资源所引起的冲突。

2.交替执行 实验总结(不管有没有做出来)

1.将方法全部都用synchronized来修饰,确保所有变量都持有锁 2.线程之间的协作使用wait()和notify()并配合上boolean变量来完成 3.任务1执行完后,改变布尔值,并唤醒另一个任务,然后开始执行任务2,任务2执行完后,改变boolean变量,唤醒任务1,这样交替执行下去直至两个任务都不能执行为止

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.查询资料回答:什么是线程安全?(用自己的话与代码总结,写自己看的懂的作业)

线程安全就是确保一次只能有一个线程在访问共享资源,而不是多个线程同时访问共享资源,使运行结果不确定。

    id++;
} public synchronized static void subtractId() {
id--;
}``` `这个例子的运行结果就是不唯一的,也就是不符合线性安全的` #3. 码云上代码提交记录 ###3.1. 码云代码提交记录 ![](http://images2015.cnblogs.com/blog/1109918/201705/1109918-20170506201759570-1713091312.png)

java第十一次作业的更多相关文章

  1. 1903021121-刘明伟-java十一周作业-java面向对象编程

    项目 内容 课程班级博客链接 19级信计班(本) 作业要求链接 第十一周作业 博客名称 1903021121-刘明伟-java十一周作业-java面向对象 要求 每道题要有题目,代码(使用插入代码,不 ...

  2. 2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结

    作业地址 第十一次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1933 (作业界面已评分,可随时查看,如果对自己的评分有 ...

  3. 2017-2018-2 20179205《网络攻防技术与实践》第十一周作业 SQL注入攻击与实践

    <网络攻防技术与实践>第十一周作业 SQL注入攻击与实践 1.研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 缓冲区溢出原理   在计算机内部,输入数据通常被存放在一个临时空间内, ...

  4. 软工 · 第十一次作业 - Alpha 事后诸葛亮(团队)

    软工 · 第十一次作业 - Alpha 事后诸葛亮(团队) 组长本次作业链接 现代软件工程 项目Postmortem 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场 ...

  5. 第十一次作业 - Alpha 事后诸葛亮(团队)

    软工 · 第十一次作业 - Alpha 事后诸葛亮(团队) 组长本次作业链接 现代软件工程 项目Postmortem 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场 ...

  6. 【西北师大-2108Java】第十一次作业成绩汇总

    [西北师大-2108Java]第十一次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第13周学习指导及要求 实验目的与要求 (1)掌握事件处理的基本原理,理解其用途: (2)掌握AWT事件模型 ...

  7. 2016-2017-2 《Java程序设计》预备作业2总结

    2016-2017-2 <Java程序设计>预备作业2总结 古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把.」 在对计算机系的学生情况的调查中,我说: 最近 ...

  8. 2016-2017-2 《Java程序设计》预备作业1 总结

    2016-2017-2 <Java程序设计>预备作业1 总结 预备作业01:你期望的师生关系是什么见https://edu.cnblogs.com/campus/besti/2016-20 ...

  9. JAVA第三周作业(从键盘输入若干数求和)

    JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...

随机推荐

  1. python基础笔记(一)

    python解释器执行python程序的过程:python3 C:\test.py 1.启动python解释器(内存中) 2.将C:\test.py 内容从硬盘读入内存(这一步与文本编辑器是一样的) ...

  2. redis(1)

    什么是nosql 非关系型数据库 为什么要用nosql web2.0大规模动态网站的兴起 high performance ,高并发读写,动态页面展示与交互,比如微博点赞评论等操作,实时统计在线人数排 ...

  3. python之----------字符编码具体原理

    1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编 ...

  4. 【转】C++静态库与动态库

    C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

  5. js基础语法习题补充

    输入三个整数,x,y,z,最终以从小到大的方式输出. <<script> var x=prompt("请输入数字") var y=prompt("请输入 ...

  6. 质量体系 CMMI

    CMMI初识 CMM-Capability Maturity Model,能力成熟度模型.CMMI-Capability Maturity Model Integration,能力成熟度模型集成. C ...

  7. 打造基于Clang LibTooling的iOS自动打点系统CLAS(一)

    1. 手动打点的弊端 在很多ios工程师的日常工作中,不但要对接产品提出的功能性需求,还会收到产品出于数据统计分析需求目的而提出的附带的隐形需求:统计打点.大多数公司的基础框架层都会对统计打点功能做高 ...

  8. 刚安装Fedora 23工作站后,你必须要做的24件事

    [51CTO.com快译]Fedora 23工作站版本已发布,此后我们就一直在密切关注它.我们已经为新来读者介绍了一篇安装指南:<Fedora 23工作站版本安装指南> 还有一篇介绍如何从 ...

  9. pwnable.kr brainfuck之write up

    I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...

  10. 自动化的基于TypeScript的HTML5游戏开发

    自动化的开发流程 在HTML5游戏开发或者说在Web客户端开发中,对项目代码进行修改之后,一般来说,需要手动刷新浏览器来查看代码修改后运行结果.这种手动的方式费时费力,降低了开发效率.另外,如果我们使 ...