IT十八掌作業_java基礎第八天_多線程

感謝大家對IT十八掌大數據的支持,今天的作業如下



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

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

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

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










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

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

public class CarTest {


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();

}


}


class Car extends Thread{

private Cave mCave;

private String mName;

public Car(Cave cave, String name) {

super();

this.mCave = cave;

this.mName = name;

}



@Override

public void run() {

synchronized (mCave) {

System.out.println(mName + "開始穿過山洞");

try {

sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

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

}

}

}


class Cave {

}


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

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

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

package com.it18zhang_08.job.demo;


//

public class HoneyDemo{

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();

}

}


//生產者

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();

}

catch(Exception e){}

}

else{

list.add(new Integer(i));

System.out.println("P : " + i);

i ++ ;

list.notify();

}

}

}

}

}

//消費者

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){

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

list.removeAll(list);

//通知等待隊列中的線程。

list.notify();

}

else{

try{

list.wait();

}

catch(Exception e){}

}

}

}

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章