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