201621123040《Java程序设计》第十一周学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了201621123040《Java程序设计》第十一周学习总结相关的知识,希望对你有一定的参考价值。

1.本周学习总结

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

技术分享图片

2.书面作业

2.1源代码阅读:多线程程序BounceThread

2.1.1BallRunnable类有什么用?为什么代码中需要调用Thread.sleep进行休眠?

  • 实现了Runnable接口,显示每个启动线程中的小球位置,通过component.repaint()方法实现小球的移动;调用Thread.sleep进行休眠是为了让正在执行的线程休眠一段时间,不消耗CPU资源

2.1.2Ball.java只做了两件事,这两件事分别是什么?BallComponent对象是干什么的?其内部的ArrayList有什么用?程序运行过程中,生成了几个BallComponent对象?该程序使用了多线程技术,每个小球是分别在不同的线程中进行绘制吗?

  • Ball.java做了两件事--1)定义move()函数,确定小球的位置变换,实现小球的移动;2)定义getshape()函数,确定当前位置小球的形状;BallComponent对象--1)add(Ball b)添加要bounce的小球;2)paintComponent(Graphics g)绘制每个位置的小球;其内部的ArrayList是为了记录所添加的小球;程序运行过程中,生成了1个BallComponent对象;该程序使用了多线程技术,每个小球在不同的线程中进行绘制(在BallThread.java中addBall()的t.start()启动新线程)

2.2实验总结:题集(多线程)

2.2.1题目:Thread、PrintTask、Runnable与匿名内部类。

并回答:a)通过定义Runnable接口的实现类来实现多线程程序比通过继承自Thread类实现多线程程序有何好处?b) 6-1,6-3,6-11实验总结。

  • Runnable接口的实现类来实现多线程避免了继承的局限(一个类可以有多个接口,但是只能继承一个父类)

  • 6-1 实验总结
    编写MyThread类继承Thread;在类中实现对n的定义;通过for循环遍历输出0~n-1;要注意的是最后的输出System.out.println(Thread.currentThread().getName()+" "+isAlive())只输出一次,不可嵌套在for循环中
    6-3 实验总结
    本题是对匿名类的回顾,按题目要求逐次输出主线程名、线程t1线程名、线程t1实现的所有接口
    6-11 实验总结
    与6-1具有一定的相似性,不同之处在于编写PrintTask类继承Runnable接口

2.2.2使用Lambda表达式改写6-3

技术分享图片

技术分享图片

2.2.3题目:6-2(Runnable与停止线程)。回答:需要怎样才能正确地停止一个运行中的线程?

  • 使用stop()方法停止线程,但其自身存在缺陷性,强行终止线程,不适用;通过6-2练习,我们可以通过编写public void StopMe()方法实现停止线程,boolean flag = true;使得能够安全停止线程

2.3互斥访问

2.3.1修改TestUnSynchronizedThread.java源代码使其可以同步访问。(关键代码截图,需出现学号)

技术分享图片

技术分享图片

2.4互斥访问与同步访问

2.4.1除了使用synchronized修饰方法实现互斥同步访问,还有什么办法可以使用synchronized实现互斥同步访问,使用代码说明(请出现相关代码及学号)?

  • 还可以使用synchronized(this)代码块实现互斥同步访问

技术分享图片

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

  • synchronized作用域在某个类中,防止多线程同时访问这个类的synchronized static 方法,对类的所有对象起作用
  • synchronized(this)代码块作用域为当前对象,表示只对这个块的资源实现互斥访问

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

  • 实现互斥访问的原理即给共享资源上同步锁,用synchronized修饰方法或代码块即可实现同步锁机制;保证某一时刻只能有一个线程访问资源

2.4.4Java多线程中使用什么关键字实现线程之间的通信,进而实现线程的协同工作?

  • synchronized关键字
  • volatile关键字
  • wait方法
  • notify方法

2.5线程间的合作:生产者消费者问题

2.5.1运行MyProducerConsumerTest.java。正常运行结果应该是仓库还剩0个货物。多运行几次,观察结果,并回答:结果正常吗?哪里不正常?为什么?

  • 结果不正常;不同次的运行出现不同次的运行结果,原因是进货取货速度不一致

2.5.2使用synchronized, wait, notify解决该问题(关键代码截图,需出现学号)

技术分享图片

技术分享图片

技术分享图片

2.6面向对象设计作业-图书馆管理系统

2.6.1系统的功能模块表格,表格中体现出每个模块的负责人

组员 负责模块
林俊伟 登录界面
王彩云 借书界面
罗佳 还书界面

2.6.2运行视频

2.6.3讲解自己负责的模块,并粘贴自己负责模块的关键代码(出现学号及姓名)。

3.码云及PTA

3.1码云代码提交记录

技术分享图片

3.2截图"多线程"PTA提交列表

技术分享图片

技术分享图片

技术分享图片

3.3统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
第一周 189 189 10 10
第二周 304 304 9 9
第三周 557 557 10 10
第四周 621 621 8 8
第五周 326 326 7 7
第六周 972 972 12 12
第七周 338 338 4 4
第八周 379 379 6 6
第九周 492 492 5 5
第十周 473 473 6 6
第十一周 527 527 10 10





以上是关于201621123040《Java程序设计》第十一周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

201621123040《Java程序设计》第十四周学习总结

《JAVA程序设计》第十一周学习总结

201621123040《Java程序设计》第九周学习总结

《Java程序设计》第十一周学习总结

201621123080《Java程序设计》第十一周学习总结

达拉草201771010105《面向对象程序设计(java)》第十一周学习总结