zoukankan      html  css  js  c++  java
  • 201621123078《Java程序设计》第11周学习总i结

    1. 本周学习总结

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

    2. 书面作业

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

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

    Answer:BallRunnable类实现类Runnable接口,支持多线程的操作,调用Thread.sleep进行休眠是为了能够推迟线程完成的时间,让其他线程运行,如果没有的话,程序结束的很快,就看不到小球的运行轨迹。

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

    Answer:

    Q1:

    • 定义了小球移动的函数move();
    • 定义了小球的大小和坐标函数getShape();

    Q2:

    • BallComponent对象是用来添加新的小球,并将其在程序运行过程中画出。
    • 其内部的ArrayList是用来存储我们所看到的小球。
    • 只生成了一个BallComponent对象
    • 是的,在运行面板中,每点击一次start,就产生了了一个新的线程。
    1.3 选做:程序改写:程序运行时,每个小球都是从固定位置出发。如何改写该程序,使得当点击start时,每个小球可以从不同位置出发、以不同的步进移动?

    Answer:在ball.java中 getShape()函数将x,y,dx,dy,改成随机生成的即可:

    1.4 选做:不同小球的移动轨迹一模一样。改造程序,使得每个小球运行轨迹不完全一样,比如有的可以走余弦轨迹、有的可以走方波轨迹、有的走布朗运动、有的走五角星,等等。

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

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

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

    Answer:由于java的单继承机制,你继承Thread类的话,那么这个自定义线程类就不能再继承其它的类;而接口可以实现多个,所以通过实现Runnable接口来实现的话,那么这个实现类还可以继承其它的类。

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

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

    Answer:

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

    Answer:
    在该题中,我们需要编写一个 stopMe()方法来停止终止线程,主要是通过定义一个flag,true时正常退出,。停止一个线程可以用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法。我们可以使用个boolean类型的变量标记值,在while循环中来停止线程。

    参考博客:https://www.cnblogs.com/greta/p/5624839.html

    3. 互斥访问

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

    4. 互斥访问与同步访问

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

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

    Answer:可以使用synchronized关键字同步代码块来实现互斥同步访问。

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

    Answer:

    • 同步方法:
      即有synchronized关键字修饰的方法。由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
    • 同步代码块:
      即有synchronized关键字修饰的语句块。被该关键字修饰的语句块会自动被加上内置锁,从而实现同步。

    相比较而言,同步方法的作用范围比同步代码块大。

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

    Answer:进程间相互排斥的使用临界资源的现象,就叫互斥,原理是当资源被一个任务占用时,在其上加锁,其他任务无法访问它直至这个资源被解锁,被解锁后,就会有另一个任务可以使用该资源,以此类推。

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

    在Java中可以用wait () 和notify()/notifyAll()方法来协调线程间的运行进度(读取)关系

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

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

    Answer:


    结果不正常,剩余的货物会存在不为0的情况。因为在add和remove之间只是存在互斥关系,没有同步,存取速度不一,从而导致结果出错。

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


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

    6.1 系统的功能模块表格,表格中体现出每个模块的负责人。
    成员 负责模块
    吕炜彬 借图书、查看已借图书
    余硕铭 查看个人信息、浏览图书
    苏志颖 还书、时光流逝
    6.2 运行视频

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

    我负责的借图书和查看已经借图书的部分。
    借图书:

    查看书籍状态:

    主界面:

    3.码云及PTA

    3.1. 码云代码提交记录

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


    3.3 统计本周完成的代码量

    周次 总代码量 新增代码量 总文件数 新增文件数
    1 0 0 0 0
    2 280 280 5 5
    3 530 250 9 4
    4 950 420 15 6
    5 1345 395 20 5
    6 1924 579 26 6
    7 2248 324 31 5
    8 2677 429 36 5
    9 3020 343 42 6
    10 3349 329 48 6
    11 3725 376 54 6
  • 相关阅读:
    JavaWeb--HttpSession案例
    codeforces B. Balls Game 解题报告
    hdu 1711 Number Sequence 解题报告
    codeforces B. Online Meeting 解题报告
    ZOJ 3706 Break Standard Weight 解题报告
    codeforces C. Magic Formulas 解题报告
    codeforces B. Sereja and Mirroring 解题报告
    zoj 1109 Language of FatMouse 解题报告
    hdu 1361.Parencodings 解题报告
    hdu 1004 Let the Balloon Rise 解题报告
  • 原文地址:https://www.cnblogs.com/helloLV/p/7954522.html
Copyright © 2011-2022 走看看