用多线程实现银行家算法,哲学家进餐,SPOOLING算法,如有高手能帮忙写出代码,感激不尽!我的QQ23532101

解决方案 »

  1.   

    //哲学家进餐
    class ChopStick
    {
    boolean available;
    ChopStick()
    {
    available=true; 
    }
     
      public  void takeup(int num) 
      {
      //System.out.println("拿起一根筷子"); 
       while(!available) 
       {
       try
       {
       System.out.println("哲学家"+num+"等待另一根筷子"); 
       wait();    
       }
       catch(InterruptedException e)
       {}
       }
       available=false;  
        }
      
    public synchronized void putdown() 
    {
        available=true;
        notify();
    }
    }class Philosopher extends Thread
    {
    ChopStick left,right;
    int philo_num;

    Philosopher(int num,ChopStick c1,ChopStick c2)
    {
    philo_num=num;
    left=c1;
    right=c2;
    }

    public void eat()
    {
    left.takeup(philo_num);
    right.takeup(philo_num);
    System.out.println("哲学家"+philo_num+"正在进餐!");
    }

    public void think()
    {
    left.putdown();
    right.putdown();
    System.out.println("哲学家"+philo_num+"正在思考!");
    }

    public void run()
    {
    while(true)
    {
    eat();
    try
    {
    sleep(1000);
    }
    catch(InterruptedException e)  
            {
                System.out.println("中断");
            }
            think();
            try
    {
    sleep(1000);
    }
    catch(InterruptedException e)  
            {
                System.out.println("中断");
            }
            }
        }
    }
    public class exec
    {
       static ChopStick[] cs=new ChopStick[5];
        static Philosopher[] ph=new Philosopher[5];
       
        public static void main(String args[]) 
    {
    for(int i=0;i<5;i++)
    cs[i]=new ChopStick();
    for(int i=0;i<5;i++)
    ph[i]=new Philosopher(i,cs[i],cs[(i+1)%5]);
    for(int i=0;i<5;i++)
    ph[i].start();
    }
    }
      

  2.   

    多谢 hujiaboy的帮忙!!请问您能在帮我做下读者写者的算法吗?也是用JAVA写