一.本周学习总结

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

二.书面作业

本次PTA作业题集多线程

1. 源代码阅读:多线程程序BounceThread

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

    BallRunnable类实现Runnable接口,以使得多线程可以被创建。

    让当前正在执行的线程休眠一段时间,不消耗cpu资源。

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

    Ball.java定义了球的运行轨迹以及球的大小和初始位置。

    BallComponent对象会添加一个球并画出来。

    ArrayList是用来存储球的。

    生成了一个BallComponent对象。

    每运行一次start就产生一个线程,每个小球是分别在不同的线程中进行绘制。

  • 1.3 选做:程序改写:程序运行时,每个小球都是从固定位置出发。如何改写该程序,使得当点击start时,每个小球可以从不同位置出发、以不同的步进移动?

    在Ball.java中private double x = 0 private double y = 0 private double dx = 1 private double dy = 1就是设定小球初始信息的,更改x、y、dx、dy的值即可使得当点击start时,每个小球可以从不同位置出发、以不同的步进移动。

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

  • 2.1 题目:Thread、PrintTask、Runnable与匿名内部类。并回答:

    • a)通过定义Runnable接口的实现类来实现多线程程序比通过继承自Thread类实现多线程程序有何好处?

      一个类只能继承一个父类,使用Thread就会受到此局限,使用Runnable就不会,因为一个类可以继承多个接口。

    • b) 6-1,6-3,6-11实验总结。

      • 6-1:此题就是利用构造函数接收传入循环次数,再利用for循环按要求输出即可。
      • 6-3:此题就是按要求输出信息即可。
      • 6-11:此题与6-1基本类似。
  • 2.2 使用Lambda表达式改写6-3

    代码如下:

      Thread t1=new Thread(()->{
    System.out.println(mainThreadName);
    System.out.println(Thread.currentThread().getName());
    System.out.println(Arrays.toString(getClass().getInterfaces()));
    });
  • 2.3 题目:6-2(Runnable与停止线程)。回答:需要怎样才能正确地停止一个运行中的线程?

    定义一个标记(如:flag=true),当为true时,while中的线程正常运行,当要停止它时就将flag改为false,那么while循环就会跳出,线程就被停止。

3. 互斥访问

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

4. 互斥访问与同步访问

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

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

    使用同步代码块来实现互斥访问

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

    同步代码块在方法的内部使用synchronized,而同步方法直接在方法上加synchronized,作用区域会变大但是性能没有同步代码块好。

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

    每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁,这个锁是为了分配给线程的,防止打断原子操作。

    当多个线程同时调用一个方法时,会让其中一个获得对象锁,在它执行完之前其他线程无法访问,结束后释放对象锁,其他线程继续进行竞争获得对象锁。

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

    使用wait()和notify()实现线程之间的通信。

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

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

    不正常,有时会出现剩余货物不为0的情况。因为Producer和Consumer的存取速度不一致。

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

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

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

    负责人 负责模块
    张苏涛 管理员管理书库、普通用户借阅归还图书
    吴福强 普通用户及管理员的注册、登陆
  • 6.2 运行视频

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

    有普通用户类和管理员类分别定义他们的属性,图书类定义图书的属性,图书借阅类用来编写普通用户的行为方法,书库类用来编写管理员的行为方法。整个系统存储利用文件来实现,当普通用户登录时从用户登录信息文件中匹配用户名和密码,登录成功则打开对应用户的借阅信息存储文件以及书库信息文件,借阅和归还后对应文件信息更改后写回文件中。管理员登录时流程基本类似。

三.码云及PTA

  • 3.1. 码云代码提交记录

  • 3.2 截图PTA题集完成情况图

  • 3.3 统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
1 193 193 6 6
2 625 432 35 29
3 1076 451 41 6
4 1472 396 47 6
5 1932 460 53 6
6 2235 303 57 4
7 2651 416 62 5
8 2895 244 67 5
9 3275 380 73 6
10 3544 269 81 8
11 4175 631 90 9

最新文章

  1. 【腾讯Bugly干货分享】动态链接库加载原理及HotFix方案介绍
  2. 使用IntelliJ IDEA 配置Maven(入门)【转】
  3. jquery写简单的div切换
  4. Android SlidingMenu 仿网易新闻客户端布局
  5. Practice:输入年月日,判断该时间为一年的第几天
  6. 【BZOJ】1082: [SCOI2005]栅栏(二分+dfs)
  7. 关于三星A7屏幕锁已由管理员、加密政策,或证书存储禁用
  8. [转] c#中 多线程访问winform控件
  9. uublog在线测试demo
  10. onethink
  11. python文件_批量改名
  12. 文件操作中的FLAG(O_RDONLY,O_WRONLY )的值
  13. Contest Balloons
  14. Nginx反向代理使用【转载】
  15. 如何解决Mac无法读取外置硬盘问题?
  16. SpringData使用与整合
  17. 观察者模式(Observer Pattern)
  18. POJ 2718【permutation】
  19. 使用FormsAuthenticationTicket进行登陆验证
  20. Node.js实战(十一)之Buffer

热门文章

  1. 记录一些sql,怕忘了
  2. windows 关机 重启 命令
  3. 关于std:auto_ptr std:shared_ptr std:unique_ptr
  4. 迷你MVVM框架 avalonjs 学习教程1、引入avalon
  5. windchill 跑物料变更流程后无法发送物料到SAP
  6. Theoretical & Applied Mechanics Letters第2届编委会2015年度第1次全体编委会工作会议纪要(转自力学学会)
  7. iOS App图标和启动画面尺寸
  8. 利用WKWebView实现js与OC交互注意事项
  9. 26-python图形化插件 wxpython安装时的问题
  10. Excel中保留有效数字的问题