做業_java基礎第八天_多線程

1. 5輛汽車過山洞,依次通過山洞。每輛車經過山洞花費10秒,使用多線程實現。java

2. 用多線程模擬蜜蜂和熊的關係。多線程

   蜜蜂是生產者,熊是消費者。蜜蜂生產蜂蜜是累加的過程,熊吃蜂蜜是批量(滿100吃掉)的過程。ide

   生產者和消費者之間使用通知方式告知對方。注意不能出現死鎖的現象。函數


---------------------------------------------------------------------this

【--------------------------------做業1-------------------------------------------】spa

package 做業;線程

class Cave{}orm


class Car extends Thread{隊列

private Cave mCave;rem

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<Integer> list;

String name;

//構造函數

public Bee(java.util.List<Integer> 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<Integer> list;

String name;

public Bear(java.util.List<Integer> 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<Integer> list=new java.util.ArrayList<Integer>();

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

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

//啓動生產者和消費者

p.start();

c1.start();

}

}

相關文章
相關標籤/搜索