zoukankan      html  css  js  c++  java
  • 实验题目:用Java的等待/通知机制实现“厨师—食 者”问题。假设分别有4位厨师和6位食者。厨师做一盘 菜的时间为4s,食者吃一盘菜的时间为3s。编程实现这 一功能,参考“生产者—消费者”问题。

    Food类

    package cook_eat;
    
    public class Food {
    
    }
    

      

    Cook类

    package cook_eat;
    
    public class Cook extends Thread{
    
    	private Table table;
    	
    	public Cook(Table table) {
    		this.table = table;
    	}
    
    	@Override
    	public void run() {
    		while(true) {
    			// 做菜
    			Food food = new Food();
    			// 需要四秒
    			try {
    				Thread.sleep(4000);
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    			// 上菜
    			table.putFood(food);
    		}
    	}
    	
    }
    

      

    Eater类

    package cook_eat;
    
    public class Eater extends Thread{
    
    	private Table table;
    	
    	public Eater(Table table) {
    		this.table = table;
    	}
    	
    	@Override
    	public void run() {
    		while(true) {
    			// 吃菜
    			Food food = table.getFood();
    			// 需要三秒
    			try {
    				Thread.sleep(3000);
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    }
    

      

    Table类

    package cook_eat;
    
    import java.util.LinkedList;
    
    class Table extends LinkedList<Object> {
    	int maxSize; // 容器的最大容量
     
    	public Table(int maxSize) {
    		this.maxSize = maxSize;
    	}
    	public synchronized void putFood(Food f) { // 向容器内放置食品
    		
    		while (this.size() >= this.maxSize) {
    			try {
    				System.out.println("The table is too full,wait a moment!");
    				wait();
    			} catch (Exception e) {
    			}
    		}
    		this.addLast(f);
    		System.out.println("厨师上一份菜,现在桌上还有有"+this.size()+"份菜");
    		notifyAll();
    	}
     
    	public synchronized Food getFood() { // 从容器内取食品
    		Food f;
    		while (this.size() <= 0) {
    			try {
    				System.out.println("There is no food now ,come here later!");
    				wait();
    			} catch (Exception e) {
    			}
    		}
    		f = (Food) this.getFirst();
    		this.remove(f);
    		System.out.println("食客吃了一份菜,现在桌上有"+this.size()+"份菜");
    		notifyAll();
    		return f;
    	}
    }
    

      

    Test类

    package cook_eat;
    
    public class Test {
    
    	public static void main(String[] args) {
    		// 假定一开始桌上有六道菜
    		Table table = new Table(6);
    		// 厨师开始做菜
    		new Cook(table).start();
    		new Cook(table).start();
    		new Cook(table).start();
    		new Cook(table).start();
    		// 食客开始吃菜
    		new Eater(table).start();
    		new Eater(table).start();
    		new Eater(table).start();
    		new Eater(table).start();
    		new Eater(table).start();
    		new Eater(table).start();
    	}
    
    }
    

      

  • 相关阅读:
    java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
    STS工具各版本下载网址
    SpringBoot访问不了JSP但却能进入后台
    springboot o.a.tomcat.util.scan.StandardJarScanner : Failed to scan [file:/D:/apache-maven-3.0.5[系统找不到指定路径]
    STS工具:mybayis连接oracle数据库
    springBoot怎样访问静态资源?+静态资源简介
    springboot注解
    8.12-14 df 、mkswap、swapon、swapoff、sync
    8.5-7 mkfs、dumpe2fs、resize2fs
    8.2-3 partprobe、tune2fs
  • 原文地址:https://www.cnblogs.com/mjn1/p/12560016.html
Copyright © 2011-2022 走看看