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<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();
}
}
转载于:https://blog.51cto.com/11306424/1774060