多线程作业 java_作业_java基础第八天_多线程

1. 5辆汽车过山洞,依次经过山洞。每辆车通过山洞花费10秒,使用多线程实现。

2. 用多线程模拟蜜蜂和熊的关系。

蜜蜂是生产者,熊是消费者。蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程。

生产者和消费者之间使用通知方式告知对方。注意不能出现死锁的现象。

---------------------------------------------------------------------

【--------------------------------作业1-------------------------------------------】

package 作业;

class Cave{}

class Car extends Thread{

private Cave mCave;

private String mName;

public Car(Cave cave,String name){

super();

this.mCave=cave;

this.mName=name;

}

//run函数

public void run(){

synchronized(mCave){

System.out.println(mName+"开始过山洞");

try {

sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(mName+"完成穿过山洞");

}

}

}

//5辆汽车过山洞,依次经过山洞。每辆车通过山洞花费10秒,使用多线程实现。

public class CarTest1 {

public static void main(String[] args) {

Cave cave=new Cave();

Car car1=new Car(cave,"car1");

Car car2=new Car(cave,"car2");

Car car3=new Car(cave,"car3");

Car car4=new Car(cave,"car4");

Car car5=new Car(cave,"car5");

car1.start();

car2.start();

car3.start();

car4.start();

car5.start();

}

}

【--------------------------------作业2-------------------------------------------】

package 作业;

//用多线程模拟蜜蜂和熊的关系。

//蜜蜂是生产者,熊是消费者。蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程。

//生产者和消费者之间使用通知方式告知对方。注意不能出现死锁的现象。

//生产者

class Bee extends Thread {

final static int MAX=100;

//成员变量

java.util.List list;

String name;

//构造函数

public Bee(java.util.List list,String name){

this.list=list;

this.name=name;

}

//放置数据

public void run(){

int i=1;

while(true){

//对集合进行同步

synchronized(list){

int size=list.size();//取出集合里面的数量

if(size>=MAX){

try{

list.wait(10);

}catch(Exception e){}

}

else{

list.add(new Integer(i));

System.out.println("p"+i+"集合没有满就继续生产直到满为止");

i++;

list.notify();//------------------------通知等待队列中的线程

}

}

//yield();

}

}

}

//消费者

class Bear extends Thread{

java.util.List list;

String name;

public Bear(java.util.List list,String name){

this.list=list;

this.name=name;

}

//取数据

public void run(){

while(true){

synchronized(list){

int size=list.size();

if(size>=100){//熊吃蜂蜜是批量满100吃掉的过程

System.out.println("C 又吃掉:"+size);

list.removeAll(list);

//boolean removeAll(Collection> c)从列表中移除指定 collection 中包含的所有元素(可选操作)。

list.notifyAll();

}else{

try{

list.wait(10);

}catch(Exception e){}

}

}

//yield();

}

}

}

public class HoneyDemo2 {

public static void main(String[] args) {

java.util.List list=new java.util.ArrayList();

Bee p=new Bee(list,"kk");

Bear c1=new Bear(list,"");

//启动生产者和消费者

p.start();

c1.start();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值