201621123006 《Java程序设计》第11周学习总结

Posted

tags:

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

1. 本周学习总结

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

技术分享图片


2. 书面作业

本次PTA作业题集多线程
1. 源代码阅读:多线程程序BounceThread

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

  • BallRunnable实现了Runnable接口。
  • 当线程执行太快时需要进行休眠,在这个题中,如果不进行休眠我们就看不到小球的运动轨迹了。另一方面,为了让其他线程有机会执行也需要休眠。

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

  • Ball.javamove()使小球移动getShape()获取小球的大小和位置。
  • 添加并画出一个新的小球。
  • ArrayList用来存放这些小球。
  • 一个。
  • 每点击一次start就会启动一个线程,所以每个小球都是在自己的线程中绘制的。

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

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

  • 1、Runnable接口适合多个相同程序代码的线程共享同一个资源。
    2、当我们使用一个已经继承了某个类的子类来创建线程时,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么就只能选择实现Runnable接口的方式。
  • 实验总结:
    6-1就是编写MyThread类继承自Thread,在MyThread中重写run方法,用System.out.println(Thread.currentThread().getName()+" "+isAlive());语句输出。
    6-3启动一个线程,使用System.out.println(Arrays.toString(getClass().getInterfaces()));打印三行信息。
    6-11实现Runnable接口,在run方法中输出整数0~n-1。

2.2 使用Lambda表达式改写6-3
技术分享图片

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

  • Thread类中可以用stop()方法来终止线程,但是很不安全,当线程发生阻塞时,我们可以使用interrupt()方法,虽然它不会中断一个正在运行的线程,但它可以使一个被阻塞的线程抛出一个中断异常,从而使线程提前结束阻塞状态,退出堵塞代码。

3. 互斥访问

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

技术分享图片


4. 互斥访问与同步访问

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

技术分享图片

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

  • 同步方法是像3.1那样直接在方法名前加上synchronized,而同步代码块则是在方法内部加synchronized关键字。

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

  • 通过对共享资源进行上锁来实现互斥访问。
  • 线程状态变化:当一个线程开始运行的时候,我们给它所访问的方法上一把锁,此时,其他线程不能访问该方法,待当前的线程执行完后,给它解锁,第二个线程开始访问(此时其他线程也无法访问该方法),以此类推直到所有线程停止运行。

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

  • 使用wait()notify()方法来实现线程的协同工作。

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

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

技术分享图片
技术分享图片

  • 不正常。仓库中还有货物时运行结果显示无货。这是添加和出库的速度不一样导致的。

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

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

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

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

3.1. 码云代码提交记录

技术分享图片

3.2 截图"多线程"PTA提交列表
技术分享图片
技术分享图片

需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量

技术分享图片
技术分享图片
















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

201621123006 《Java程序设计》第11周学习总结

201621123006 《Java程序设计》第12周学习总结

201621123006 《Java程序设计》第13周学习总结

20145320 《Java程序设计》第1周学习总结

20145118 《Java程序设计》第1周学习总结

201621123021 《Java程序设计》第1周学习总结