201621123065《JAVA程序设计》第11周学习总结

1. 本周学习总结

1122356-20171201204458042-1601639878.png

2. 书面作业

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

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

BallRunnable类实现Runnable接口,支持多线程;调用Thread.sleep进行休眠则在规定时间内不参与参与到CPU竞争,让线程休眠就可以看到小球的运动轨迹,如果时间为0即Thread.Sleep(0),就触发操作系统立刻重新进行一次CPU竞争就看不见轨迹。

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

  • 实现小球的移动方法;获得小球的坐标和大小
  • BallComponent对象的作用是添加小球和画出小球
  • ArrayList用于存放小球
  • 运行中生成了一个BallComponent对象
  • 是的每个小球是分别在不同的线程中进行绘制

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

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

    定义Runniable接口比继承Thread类实现多线程的好处:
  • 适合多个相同代码的线程去处理同一个资源的情况
  • 可以避免由于java的单继承特性带来的局限
  • 增强了程序的健壮性,代码能够被多个线程共享,代码与数据时独立的

6-1实验总结:
创建MyThread类对象时指定循环次数n,再创建一个输出从0到n-1的整数的任务即可。

6-3实验总结:
创建代表任务的Runnable实现类的对象,在任务里面写要求的三行输出。

6-11实验总结:
这个题与6-1相似,就是要多实现一个Runnable接口。

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与停止线程)。回答:a)需要怎样才能正确地停止一个运行中的线程?b)6-2实验总结。

a)不能使用stop()!!!stop()方法已经被废弃;可以使用共享变量的方式,共享变量可以被多个执行相同任务的线程用来作为是否中断的信号,通知中断线程的执行;也可以使用interrupt方法终止线程,这种方法用于线程阻塞时终止线程。

b)public void stopMe();和public void sendWord(String word)方法就编写语句flag = true;this.word = word;就可以实现,主要是run()方法,对word包含alien按格式进行输出,要注意加入while(!flag)语句来判断程序的执行或终止。

3. 互斥访问

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

1122356-20171202153444214-840832392.png
1122356-20171202153502479-1901927460.png

4. 互斥访问与同步访问

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

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

public static void addId() {synchronized (Counter.class) {id++;}
}

用synchronized的同步代码块实现互斥同步访问

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

同步代码块 :
即有synchronized关键字修饰的语句块。
被该关键字修饰的语句块会自动被加上内置锁,从而实现同步
方法如下:

synchronized(object){ }

同步方法 :
    即有synchronized关键字修饰的方法。 
    由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 
    内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
方法:

public synchronized void save(){}

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

原理:对象锁,在程序中,每个对象都有一把锁,只有获得了对象锁,才能执行相应的synchronized代码块或者方法,共享资源在一个时间段内只允许一个线程访问,访问完了另一个线程才能访问,运用synchronized关键字代码如下;

class Counter {private static int id = 0;public synchronized static void addId() {id++;}public synchronized static void subtractId() {id--;}public static int getId() {return id;}
}

某一线程竞争获得对象锁,其余线程在等待池中等待线程释放对象锁,当线程释放对象锁其余线程又开始竞争对象锁,直到程序结束

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

使用wait ()、notify()、notifyAll()关键字实现线程之间的通信

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

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

1122356-20171202155108886-267959641.png

1122356-20171202155232745-1762071427.png
两次放入取出相同,但结果却不一样;因为producer和consumer的存取速度不一致,线程之间没有合作就会产生错乱

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

1122356-20171202160805741-598790092.png
1122356-20171202160833710-182243682.png

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

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

6.2 运行视频

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

3.码云及PTA

3.1. 码云代码提交记录

1122356-20171202165817960-795804030.png

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

1122356-20171202165333179-2137651910.png
1122356-20171202165400991-121400147.png

3.3 统计本周完成的代码量

1122356-20171202164852507-1097353668.png

周数行数新增行数文件数新增文件数
第一周393999
第二周278239189
第三周4311533315
第四周894182519
第五周11542606716
第六周13542007912
第七周1463109856
第八周177631310116
第九周19031271065
第十周213623312216
第十一周286172514624

转载于:https://www.cnblogs.com/201621123065guo/p/7918418.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue使用v-for循环,动态修改element-ui的el-switch

在使用element-ui的el-switch中&#xff0c;因为要用v-for循环&#xff0c;一直没有成功&#xff0c;后来仔细查看文档&#xff0c;发现可以这样写 <el-switch v-for"(item, key) in list" v-model"item.is" :key"key" :active-value"…

前端加按钮将图片另存为_Windows 10系统如何将自己的照片制作成文件夹图标

我们大家都在电脑上建有很多文件夹&#xff0c;有时候查找自己需要的资料文件夹时不太容易&#xff0c;很浪费时间。如果将自己的照片作为常用文件夹的图标&#xff0c;看起来醒目查找时也更为方便些。下面就介绍具体的操作教程。一、将照片格式转换为图标文件格式在电脑上将图…

codeforces 125 A-E 补题

A Measuring Lengths in Baden 进制转换 水题 #include<bits/stdc.h> using namespace std;int main() {int n;scanf("%d",&n);int an/36;n-a*36;int b(n)/3;if((n%3)>2)b;while(b>12)b-12,a1;printf("%d %d\n",a,b);return 0; }B Simple …

在JAXB解组期间应用名称空间

对于某些XML模式来说&#xff0c;它是一组严格的规则&#xff0c;用于规定XML文档的结构方式。 但是对于其他人来说&#xff0c;通常的准则是指出XML的外观。 这意味着有时出于某些原因人们希望接受不符合XML模式的输入。 在此示例中&#xff0c;我将演示如何利用SAX XMLFilter…

java怎么把文件写入到usb里_如何创建PowerShell脚本以将文件复制到USB闪存驱动器?...

此代码最后准备使用可移动驱动器(例如插入的USB驱动器)&#xff1a;$drives [System.IO.DriveInfo]::GetDrives()$r $drives | Where-Object { $_.DriveType -eq Removable -and $_.IsReady }if ($r) {return ($r)[-1]}throw "No removable drives found."这种方式…

利用css transition属性实现一个带动画显隐的微信小程序部件

我们先来看效果图 像这样的一个带过渡效果的小部件在我们实际开发中的应用几率还是比较大的&#xff0c;但是在开发微信小程序的过程中可能有的小伙伴发现transition这个属性它不好使&#xff08;下面说明&#xff09;所以我们这个时候会考虑去使用微信官方提供的wx.createAnim…

c语言学生管理系统链表(dev vs2012下可以运行)

struct student { char name[10]; char sex[5]; long int num;//学号 int xuhao; int age; float score[3]; float averange; char DJ;//存放等级哦 struct student *next;};//定义结构体变量保存 名字 性别 年龄 成绩] 结构体声明int n;//存放学生人数int man;//存放统计的男生…

python 东哥 with open_python 连接redis cluster

#!/usr/bin/env python# encoding: utf-8#author: 东哥加油!#file: clear_pool.py#time: 2018/8/28 17:06from rediscluster import StrictRedisClusterimport datetimeimport sysdef redis_cluster():redis_nodes [{host:192.168.15.6,port:6379},{host:192.168.15.7,port:63…

go gcc

http://www.cnblogs.com/zkweb/p/7880099.html转载于:https://www.cnblogs.com/thrillerz/p/7958446.html

抽象工厂设计模式解释

抽象工厂设计模式是工厂设计模式的另一种形式。 这种模式可以被视为“超级工厂”或“工厂工厂”。 抽象工厂设计模式&#xff08;属于“四人帮”的一部分&#xff09;属于“创新设计模式”类别&#xff0c;它提供了一种封装一组具有公共链接的工厂的方法&#xff0c;而无需突出…

app账号退不出去_最新!多交的税可以退,同学,你今天退税了吗?

4.3 号 更新。1、有知友留言&#xff0c;已经收到退税了。2、部分地区陆续开放申报了&#xff0c;建议大家不要着急。3、大家耐心一点&#xff0c;该是你的就是你的&#xff0c;退税这个事多退少补&#xff0c;建议大家在白天上班时间去APP上看看&#xff0c;毕竟相关公务人员也…

【BZOJ2004】[Hnoi2010]Bus 公交线路 状压+矩阵乘法

【BZOJ2004】[Hnoi2010]Bus 公交线路 Description 小Z所在的城市有N个公交车站&#xff0c;排列在一条长(N-1)km的直线上&#xff0c;从左到右依次编号为1到N&#xff0c;相邻公交车站间的距离均为1km。 作为公交车线路的规划者&#xff0c;小Z调查了市民的需求&#xff0c;决定…

课时77.序选择器(掌握)

CSS3中新增的选择器最具代表性的就是序选择器。 1.同级别的第几个 1. :first-child 选中同级别中的第一个标签 注意点&#xff1a;不区分类型 但是我们这里有一个注意点&#xff0c;如果我们在第一个p之前加一个h1&#xff0c;则第一个p就不变红了&#xff0c;因为我们…

Gulp——文件压缩和文件指纹

先看下文件指纹添加成功发布后的“成果”。 首先介绍下gulp的文件压缩&#xff08;压缩css和js&#xff09; &#xff08;下面介绍的代码移步这里&#xff09; 我的文件目录如下&#xff1a; &#xff08;标红部分是生成的处理后的文件&#xff09; 如何使用gulp&#xff0c;请…

java afconsole_Java ——基础语法

package myhello; //本类所在的包的路径import af.util.AfMath;//导入对应的类import java.util.Random;//导入随机数的类public classHelloWorld{public static voidmain(String[] args){int a 8;inti;int total 0;int score 80;System.out.println(a > 8);//空语句 只有…

Java 7:使用NIO.2进行文件过滤-第2部分

大家好。 这是使用NIO.2系列进行文件过滤的第2部分。 对于那些尚未阅读第1部分的人 &#xff0c;这里有个回顾。 NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API&#xff0c;您可以执行与java.io相同的操作&#xff0c;以及许多出色的功能&#xff0c;例如&a…

js for 循环 添加tr td 算法

StringBuffer sbnew StringBuffer(); int n 5; sb.append("<tr>"); List<MenuBean> chs mb.getChildren(); for(int j 0; chs ! null && j < chs.size(); j){ MenuBean _mb2 chs.get(j); if (i % n 0)//被n整除&#xff0c;即有了n列之后…

1034. 二哥的金链

Description 一个阳光明媚的周末&#xff0c;二哥出去游山玩水&#xff0c;然而粗心的二哥在路上把钱包弄丢了。傍晚时分二哥来到了一家小旅店&#xff0c;他翻便全身的口袋也没翻着多少钱&#xff0c;而他身上唯一值钱的就是一条漂亮的金链。这条金链散发着奇异的光泽&#xf…

课时76.兄弟选择器(掌握)

我们先来明确一点&#xff0c;什么是兄弟&#xff1f; 比如&#xff0c;head和body是兄弟&#xff0c;必须是同级关系&#xff0c;如果是嵌套关系&#xff0c;儿子&#xff0c;孙子则不可以。 1.相邻兄弟选择器 CSS2 作用&#xff1a;给指定选择器后面紧跟的那个选择器选中的…

java中不能定义为变量名称_Java,“变量名”不能解析为变量

我使用Java使用Eclipse&#xff0c;出现此错误&#xff1a;"Variable name" cannot be resolved to a variable.使用此Java程序&#xff1a;public class SalCal {private int hoursWorked;public SalCal(String name, int hours, double hoursRate) {nameEmployee …