IT十八掌作业_java基础第九天_多线程、自动拆装箱

1.蜜蜂和熊的生产消费关系,熊在蜂蜜满10斤吃掉。蜜蜂一次生产一斤蜂蜜,且蜜蜂生成一斤蜂蜜花费的时间是10s。

十只蜜蜂和两只熊。

class Bee extends Thread{

private int bag;

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(Box box, String name) {

super();

this.box = box;

this.name = name;

}

public void run()

{

//满足放蜂蜜的条件

while (true) {

//如果不足 5

if(bag >= 0 && bag < 5){

bag ++;

try {

System.out.println(name + "加蜂蜜,数量" + bag);

Thread.sleep(10);

} catch (Exception e) {

// TODO: handle exception

}

}

if (bag >= 5) {

synchronized (box) {

int cap = box.capacity;

if (cap == Box.MAX) {

System.out.println("蜂蜜满了");

try {

box.wait(); //

} catch (Exception e) {

// TODO: handle exception

}

}//未满

else {

//剩余空间

int remain = Box.MAX - cap ;

if (bag >= remain) {

box.capacity = Box.MAX;

bag = bag - remain;

box.notifyAll();

}

else {

box.capacity = box.capacity + bag;

bag = 0;

System.out.println(name + "加蜂蜜,容器中的数量为" + box.capacity);

}

}

}

}

}

}

}

class Box {

public static final int MAX = 20;

public int capacity = 0 ;

}

class Bear extends Thread {

private Box box;

private String name;

public Bear(Box box, String name) {

super();

this.box = box;

this.name = name;

}

public void run()

{

while (true)

{

synchronized (box) {

if (box.capacity > 10)

{

System.out.println("总量为:"+box.capacity);

box.capacity = box.capacity - 10;

System.out.println(name + "吃了,剩余 "+box.capacity);

box.notifyAll();

}else {

try {

System.out.println(name + "等着急了");

box.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

}

class App2 {

public static void main(String[] args) {

// TODO Auto-generated method stub

Box box = new Box();

Bee b1 = new Bee(box,"b1");

Bee b2 = new Bee(box,"b2");

Bee b3 = new Bee(box,"b3");

Bee b4 = new Bee(box,"b4");

Bee b5 = new Bee(box,"b5");

Bee b6 = new Bee(box,"b6");

Bee b7 = new Bee(box,"b7");

Bee b8 = new Bee(box,"b8");

Bee b9 = new Bee(box,"b9");

Bee b10 = new Bee(box,"b10");

Bear bear = new Bear(box,"熊大");

Bear bear2 = new Bear(box,"熊二");

b1.start();

b2.start();

b3.start();

b4.start();

b5.start();

b6.start();

b7.start();

b8.start();

b9.start();

b10.start();

bear.start();

bear2.start();

}

}

2.取出两个字符串中最大的公共子串。

public class StringDemo {

public static void main(String[] args) {

// TODO Auto-generated method stub

String str1 = "abcasdfasdfd";

String str2 = "a13asdfbc3dsadfasd23defsdfs";

int min = 0;

int max = 0;

int len1 = str1.length();

int len2 = str2.length();

//比较连个字符串的长度。

String minStr = len1 <= len2 ? str1 : str2;

String maxStr = len1 > len2 ? str1 : str2;

String targetStr = null;

//循环 从字符串长度小的最大的子串开始

for (int i = minStr.length(); i >= 1; i--) { // 取出子字符串

for (int j = 0; j < minStr.length() - i+1; j++) {

targetStr = minStr.substring(j, j + i);

// 比较子串 和 最大字符串是否匹配

for (int k = 0; k < maxStr.length() - targetStr.length()+1; k++) {

String tmp = maxStr.substring(k, k + targetStr.length());

System.out.println("循环第 " + k + "次");

if (maxStr.substring(k, k + targetStr.length()).equals(targetStr)) {

System.out.println(" 最大子字符串:" + targetStr);

System.exit(-1);

}

}

}

}

}

}

3.StringBuffer是线程安全的,StringBuilder不是线程安全。单线程访问情况下,性能是否一致?

在单线程访问的情况下,性能是一样的。

只有在多线程并发的情况下,StringBuilder的性能高于StringBuffer,

因为StringBuffer有加Synchronized关键字,每次只允许一个线程访问,而StringBuilder是可以同时访问的。

时间: 2024-09-28 21:35:11

IT十八掌作业_java基础第九天_多线程、自动拆装箱的相关文章

IT十八掌作业_java基础第八天_多线程

感觉大家对IT十八掌大数据的支持,今天的作业如下 1. 5辆汽车过山洞,依次经过山洞.每辆车通过山洞花费10秒,使用多线程实现. 2. 用多线程模拟蜜蜂和熊的关系. 蜜蜂是生产者,熊是消费者.蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程. 生产者和消费者之间使用通知方式告知对方.注意不能出现死锁的现象.

IT十八掌作业_java基础第十二天_集合

1.描述HashMap内部实现原理. HashMap是Map的子类实现,是key-value结构的,其中key存储的是不重复的元素,HashMap实际上是一个"链表散列"的数据结构,即数组和链表的结合体. HashMap底层就是一个数组结构,数组的每一项又是一个链表.hashmap的查找机制是先用对象的hashcode得出一个地址用equals比较地址中的链表的各个元素如果相同取出对应的value值. 2.描述Hashset和HashMap的区别. 除开HashMap和Hashtabl

IT十八掌作业_java基础第二天_进制转换原理和补码存储方式

1.负数的表现形式,为什么如此设计? 答: 负数以原码的补码形式表达. 正负数相加得0,溢出最高位,正好等于0. 2.-128是在内存中是如何存储的?推算过程 答: -128二进制的结果是10000000(按照8位算),与原码一样. 3.如果字节表示为11111111,则其真实数据是多少? 答: 11111111的原码是0000 0001,所以11111111的真是数据是-1. 4.正负数是否都支持补码的方式? 答: 都支持 5.正数是否是负数的减一取反? 答: 是.

IT十八掌作业_java基础第26天_Java基础总结/虚拟机基础

感谢大家对IT十八掌大数据的支持,今天的作业如下: 巩固java基础知识,安装虚拟机! --------------------------------------------------------------------------------------------------------答案略,自行练习

IT十八掌作业_java基础第25天_NIO

感谢大家对IT十八掌大数据的支持,今天的作业如下: 1.将NIO中的Socket通信过程使用图形进行描述和说明. 2.画图说明Runtime data area的内部结构. 3.阐述class的类加载过程. 4.反射和内省的异同,以及各自的优缺点. 5.阐述jvm中从堆和非堆的角度阐述jvm的内存结构.

IT十八掌作业_java基础第十七天_QQ案例

感谢大家对IT十八掌大数据的支持,今天的作业如下: 按照老师讲的,自己练习项目

IT十八掌作业_java基础第23天_数据库连接池\反射

感谢大家对IT十八掌大数据的支持,今天的作业如下: 1.属性赋值 ------------- 1.Man{50+ } Man man = new Man(); man.setXxx1(...); man.setXxx2(...); ... 50 Man copy = new Man(); copy = man ; copy.setXxx1(man.getXxx1()); copy.setXxx1(man.getXxx1()); copy.setXxx1(man.getXxx1()); copy.

IT十八掌作业_java基础第六天_接口与适配器模式、多态、内部类

[作业1] ------------------------------------ 使用抽象类和接口实现适配器模式设计.涉及的类和接口分别为ButtonListener(接口), 其中含有click() / dbclick() / keyUp() / keyDown()等方法. ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现. Button类中添加addListener(ButtonListener l)方法. interface ButtonListe

IT十八掌作业_java基础第三天_数组

/* 1.定义一个函数,函数功能是动态提取int[]中元素的最大值. 2.定义一个函数,从数组中查询指定的元素首次出现的位置. 3.定义函数,完成冒泡排序,大数下沉. 4.折半查找. 5.阐述 6.定义一个函数,实现矩阵的转置.arr[i][j] == arr[j][i];//前提条件是正方的. 7.遍历三维组数,横向输出三维数组的每一个层. 8.定义一个类:Dog 有名称 color age cry(); 9.阐述出来堆区,栈区,何时出现溢出,如何解决. 10.oop ------------