关键词:
1.蜜蜂和熊的生产消费关系,熊在蜂蜜满10斤吃掉。蜜蜂一次生产一斤蜂蜜,且蜜蜂生成一斤蜂蜜花费的时间是10s。
十只蜜蜂和两只熊。
2.取出两个字符串中最大的公共子串。
3.StringBuffer是线程安全的,StringBuilder不是线程安全。单线程访问情况下,性能是否一致?
4.完成8中基本数据类包装类的练习,完成自动拆装箱操作。
--------------------------------------------------------------------------------
//1.蜜蜂和熊的生产消费关系,熊在蜂蜜满10斤吃掉。蜜蜂一次生产一斤蜂蜜,且蜜蜂生成一斤蜂蜜花费的时间是10s。
package com.it18zhang.homework;
public class BeeDemo {
public static void main(String[] args) {
Box box = new Box(); //蜜罐
Bee bee1 = new Bee("b-1", box);
Bee bee2 = new Bee("b-2", box);
Bee bee3 = new Bee("b-3", box);
Bee bee4 = new Bee("b-4", box);
Bee bee5 = new Bee("b-5", box);
Bee bee6 = new Bee("b-6", box);
Bee bee7 = new Bee("b-7", box);
Bee bee8 = new Bee("b-8", box);
Bee bee9 = new Bee("b-9", box);
Bee bee10 = new Bee("b-10", box);
Bear bear1 = new Bear("熊大",box);
// Bear bear2 = new Bear("熊二",box);
bee1.start();
bee2.start();
bee3.start();
bee4.start();
bee5.start();
bee6.start();
bee7.start();
bee8.start();
bee9.start();
bee10.start();
bear1.start();
// bear2.start();
}
}
public class Bee extends Thread{
int i = 0;
private int bag = 0;
private static final int BAG_MAX = 20;
// private static final int ONCE = 5;
// private static final int TIME = 10;
private Box box;
private String name;
public Bee(String name, Box box) {
super();
this.name = name;
this.box = box;
}
public void run(){
while(true){
if(bag >= 5){
synchronized(box){
int cap = box.capacity;
if(cap >= Box.MAX){
box.notifyAll();
}
else{
int remain = Box.MAX - cap;
if(bag >= remain){
box.capacity = Box.MAX ;
bag = bag - remain;
System.out.println(name + "添加了"+remain+",name.bag="+bag+"蜜罐有"+box.capacity);
box.notifyAll();
}
else{
box.capacity = box.capacity + bag;
System.out.println(name +"添加了"+ bag +",name.bag="+bag+"蜜罐有"+box.capacity);
bag = 0;
}
}
}
}
if(bag >= Bee.BAG_MAX){
synchronized(box){
try {
box.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
else{
bag++;
System.out.println(name + ".bag="+bag);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public class Bear extends Thread{
private Box box;
private String name = null;
{
System.out.println("sss");
}
public Bear(String name,Box box) {
super();
this.name = name;
this.box = box;
}
public void run()
{
while(true)
{
synchronized (box){
if(box.capacity == Box.MAX)
{
int tmp = box.capacity ;
box.capacity = 0;
System.out.println(name+"吃了"+tmp+"蜂蜜");
box.notifyAll();
}
else
{
try {
box.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
public class Box {
public static final int MAX = 30;
public int capacity = 0;
}
package com.it18zhang.homework;
/**
*
*
* @author Liubx
*
*2.取出两个字符串中最大的公共子串
*思路:定义一个方法getMaxSubstring(str1,str2)
*sdafadf;asdfka
*fsadlfj substring
*| | y,z, 0~length()-0 1
*| | 0~length()-1 2
* | |
*| | 0~lenth()-2 3
*
*从两个字符串长度较大的开始取子串比较,一旦发现相等的子串则该子串为最大
*例如:str1.length()<str2.length()
*调用字符串的substring()方法
*/
public class MaxSubstring
{
public static void main(String[] args)
{
String str1 = "sldjfalsdfja;ldf";
String str2 = "jfalsdfja;";
System.out.println(getMaxSubstring(str1, str2));
System.out.println("----------------------------------");
System.out.println(getMaxSubstring(str2, str1));
}
public static String getMaxSubstring(String str1, String str2)
{
String max ="";
String min ="";
if(str1.length()>str2.length())
{
max = str1;
min = str2;
}
else
{
max = str2;
min = str1;
}
//假设str1>str2
for(int x=0; x<min.length(); x++)
{
/**x控制子串的大小
* y,z为两个夹板,都为角标值,这里也可以通过长度来控制,但是很容易混淆不清,使用角标可以很好的避免这个问题
* 每次确定y,z后也就是夹板大小后,就开始往后移动,停止的条件为后夹板z到达字符串末尾也就是角标值为str2.length()-1
* 但是我们使用substring(y,z)是左闭右开的区间,[y,z),所以z能取的角标最大值为str2.length;
* 当z=str2.length()时,z++为str2.length+1,所以循环条件只需设在此处即可。
*/
for(int y=0,z=min.length()-x;z<=min.length() ;y++,z++)
{
String temp = min.substring(y,z);
if(max.contains(temp))
return temp;
}
}
return "找不到相同子串";
}
}
3.StringBuffer是线程安全的,StringBuilder不是线程安全。单线程访问情况下,性能是否一致?
答:性能不一致,线程安全意味着使用了同步,而同步需要加锁,线程在访问时都需要判断锁的状态,较为
消耗资源,在多线程编程中,要谨慎使用同步,只将需要同步的代码同步。StringBuffer和StringBuilder
功能上相差不大,StringBuilder没有使用同步,而StringBuffer使用了同步,所以StringBuffer性能会比StringBuilder低一些。
4.完成8中基本数据类包装类的练习,完成自动拆装箱操作。
/*
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
*/
//byte Byte
Byte b1 = 1; //自动装箱
byte b2 = b1; //自动拆箱
System.out.println(b2)
// short Short
Short s1 = 23;
short s2 = s1;
System.out.println(s2);
// int Integer
Integer i1 = 24;
int i2 = i1;
System.out.println(i2);
// long Long
Long l1 = 312312;
long l2 = l1;
System.out.println(l2);
// float Float
Float f1 = 3.14f;
float f2 = f1;
System.out.println(f2);
// double Double
Double d1 = 3.1415926d;
double d2 = d1;
System.out.println(d2);
// char Character
Char c1 = ‘f‘;
char c2 = c1;
System.out.println(c2);
// boolean Boolean
Boolean b1 = true;
boolean b2 = b1;
System.out.println(b2);
本文出自 “菜鸟成就数据之路” 博客,谢绝转载!
it十八掌作业_java基础第八天_多线程
感觉大家对IT十八掌大数据的支持,今天的作业如下1.5辆汽车过山洞,依次经过山洞。每辆车通过山洞花费10秒,使用多线程实现。2.用多线程模拟蜜蜂和熊的关系。 蜜蜂是生产者,熊是消费者。蜜蜂生产蜂蜜是累加的过... 查看详情
it十八掌作业_java基础第八天_多线程
1.5辆汽车过山洞,依次经过山洞。每辆车通过山洞花费10秒,使用多线程实现。2.用多线程模拟蜜蜂和熊的关系。 蜜蜂是生产者,熊是消费者。蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程。  ... 查看详情
it十八掌作业_java基础第十七天_qq案例
感谢大家对IT十八掌大数据的支持,今天的作业如下:按照老师讲的,自己练习项目 查看详情
it十八掌作业_java基础第十天_集合
1、remove(intindex); //删除指定位置的元素2、remove(Objecto); //删除指定对象,考查删除对象的规则是什么?3、removeAll(Collectioncol);//删除指定集合中的所有元素。4、contains(Objecto); //是否包含5、contains(Collectioncol);//是否包含集合。-------... 查看详情
it十八掌作业_java基础第十天_集合
Student :-------------- 判断学生类对象内容是否相同,重写equals方法。需要三个条件同时满足name + age + sex都相同才相同。练习Vector向量类。---------------------作业:------------- &nb 查看详情
it十八掌作业_java基础第25天_nio
感谢大家对IT十八掌大数据的支持,今天的作业如下:1.将NIO中的Socket通信过程使用图形进行描述和说明。2.画图说明Runtimedataarea的内部结构。3.阐述class的类加载过程。4.反射和内省的异同,以及各自的优缺点。5.阐述jvm中从堆和... 查看详情
it十八掌作业_java基础第三天_数组
1.定义一个函数,函数功能是动态提取int[]中元素的最大值。classArrayDemo{ publicstaticvoidmain(String[]args) { int[]arr=newint[]{5,6,9,1,4}; intmaxNumber=getMaxNumber(arr); System.out.println("数组中的最大数为:"+maxNumber); } pu 查看详情
it十八掌作业_java基础第十四天_io
感谢大家对IT十八掌大数据的支持,今天的作业如下:1.定义函数,输出一个byte的二进制字符串。2.定义工具类,完成int数和byte[]之间的相互转换。3.阐述IO流。输入输出流字符字节流缓冲和非缓冲流转换流.4.通过File对象打印输出... 查看详情
it十八掌作业_java基础第十六天_gui/socket
感谢大家对IT十八掌大数据的支持,今天的作业如下:参照视频,编写出聊天程序。知识点分析:Socket+GUI +IO= 简版QQ------------------------------1.GUI2.SocketServerSocket:port+accept Socketsock =accept();//更新窗口//接收client的数据ne... 查看详情
it十八掌作业_java基础第十二天_集合
1.描述HashMap内部实现原理。2.描述Hashset和HashMap的区别。3.年级的集合使用Map的嵌套实现。 10班,每个班50人。4.编程实现文本文件的复制。合理设计程序,得到缓冲区的大小的高效区间。 提示缓冲区设置1k开始,不超过10M... 查看详情
it十八掌作业_java基础第十五天_io串行化/深度复制
感谢大家对IT十八掌大数据的支持,今天的作业如下:1.使用RandomAccessFile实现文件合成。2.使用java中的串行化技术实现对象图(100只猫Cat集合,但是Cat的owner不需要串行化)的深度复制。3.阐述串行化的过程,应用场景,串行ID的用... 查看详情
it十八掌作业_java基础第23天_数据库连接池反射
感谢大家对IT十八掌大数据的支持,今天的作业如下:1.属性赋值-------------1.Man{50+}Manman=newMan();man.setXxx1(...);man.setXxx2(...);...50Mancopy=newMan();copy=man;copy.setXxx1(man.getXxx1());copy.setXxx1(man.getXxx1());copy.setX 查看详情
it十八掌作业_java基础第十一天_集合
1.定义罪犯Criminal类,height(身高)/weight(体重)/blood(血型)/home(籍贯)属性。 重写hashcode和equals,使用四个属性的组合进行实现。 创建HashSet集合,里面存放20个Criminal对象,其中O型血2人,A型血3人,B型血4人,AB型血1人,其余血型不详... 查看详情
it十八掌作业_java基础第十六天_gui/socket
参照视频,编写出聊天程序。知识点分析:Socket+GUI +IO= 简版QQ------------------------------1.GUI2.SocketServerSocket:port+accept Socketsock =accept();//更新窗口//接收client的数据newThread(){run(){sock..getInputS 查看详情
it十八掌作业_java基础第三天_数组
1.定义一个函数,函数功能是动态提取int[]中元素的最大值。2.定义一个函数,从数组中查询指定的元素首次出现的位置。3.定义函数,完成冒泡排序,大数下沉。4.折半查找。6.定义一个函数,实现矩阵的转置.arr[i][j]==arr[j][i];//前... 查看详情
it十八掌作业_java基础第十三天_i
1.阐述BufferedReader和BufferedWriter的工作原理, 是否缓冲区读写器的性能恒大于非缓冲区读写器的性能,为什么,请举例说明? 2.阐述HashSet与HashMap的异同。3.Charset类操作:isSupport() 3.1)通过该类验证平台是否支持一下字符... 查看详情
it十八掌作业_java基础第十三天_io
1.阐述BufferedReader和BufferedWriter的工作原理, 是否缓冲区读写器的性能恒大于非缓冲区读写器的性能,为什么,请举例说明?2.阐述HashSet与HashMap的异同。3.Charset类操作:isSupport() 3.1)通过该类验证平台是否支持一下字符... 查看详情
it十八掌作业_java基础第十四天_io
1.定义函数,输出一个byte的二进制字符串。2.定义工具类,完成int数和byte[]之间的相互转换。3.阐述IO流。 输入输出流 字符字节流 缓冲和非缓冲流 转换流.4.通过File对象打印输出指定路径下的整... 查看详情