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

Posted

tags:

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

1. 本周学习总结

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

技术分享图片

2. 书面作业

本次PTA作业题集多线程

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

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

BallRunnable类实现了Runnable接口,实现多线程
调用Thread.sleep进行休眠是为了延缓线程完成的时间,使我们能看到小球的运行过程及轨道

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

  • Ball.java定义了小球的大小及坐标,以及小球的运动轨迹
  • BallComponent对象是用来添加小球并画出小球
  • 程序运行过程中,生成了一个BallComponent对象
  • 每个小球是分别在不同的线程中进行绘制

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

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

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

(a)

  • 通过定义Runnable接口的实现类来实现多线程程序比通过继承自Thread类实现多线程程序,可以避免父类继承的问题

(b)

  • 6.1MyThread类继承自Thread类,输出从0到n-1的整数定义在for函数内,标识信息定义在for函数外
  • 6.3采用匿名内部类来实现Runnable接口的run方法,按照题目所给标识信息一步一步输出
  • 6.11编写PrintTask类实现Runnable接口,输出从0到n-1的整数,n在创建PrintTask对象的时候初始化

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

    Thread t1 = new Thread(() -> {
    System.out.println(mainThreadName);
    System.out.println(Thread.currentThread().getName());
    System.out.println(Arrays.toString(Thread.class.getInterfaces()));
    });

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

    通过定义public void stopMe(); //用来终止线程,通过改变flag的值退出循环,来停止线程

    3. 互斥访问

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

    参考资料:Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask
    技术分享图片

    4. 互斥访问与同步访问

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

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

    同步代码块

    //201621123083 孙江涛
    public void withdraw(int money) {
        synchronized(this) {
            balance-=money;
        }  
    }

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

    同步代码块是在方法的内部使用synchonrized关键字来加锁,同步方法直接在方法名前面加synchonrized关键字来加锁

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

    程序通过给共享资源上一个同步锁,让指定时间内只允许一个线程来访问共享资源
    当程序执行synchronized同步代码块或者同步方法时,线程产生同步锁进入Lock Pool

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

    synchronized、wait()、notify()

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

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

    接过不正常,仓库中的货物不为0,出库和进库的速度不同,两者没有进行信息的交换,导致结果错误

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

    技术分享图片

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

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

    6.2 运行视频

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

3.码云及PTA

题目集:多线程

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
必须出现几个要素:提交日期-用户名(姓名与学号)-不提交说明
技术分享图片

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

需要有两张图(1. 排名图。2.PTA提交列表图)
技术分享图片
技术分享图片

3.3 统计本周完成的代码量

技术分享图片
需要将每周的代码统计情况融合到一张表中。

周次 总代码量 新增代码量 总文件数 新增文件数
12 3371 390 68 11








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

201621123083 《Java程序设计》第9周学习总结

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

201621123083 《java程序设计》第13周作业总结

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

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

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