notify
好象不能指定特定的啊

解决方案 »

  1.   

    其实是想用JAVA模拟哲学家就餐问题。不知道如何对于特定信号量唤醒进程。
      

  2.   

    以下代码只用于演示,还不完善public class ThreadA extends Thread
    {
        Object obj;    public ThreadA(Object o)
        {
           obj=o;
        }    public void run()
        {
            try
            {
                synchronized(obj)
                {
                   obj.wait();
                }
                System.out.println("Working...");
            }
            catch(Exception e)
            {
                 System.out.println(e);
            }
        }
    }class Foo
    {
        public sattic void main(String[] args)
        {
            String s("1234");
            ThreadA thread=new ThreasA(s);
            thread.start();
            s.notifyAll();
        }
    }
      

  3.   

    在线程里增加一个共享变量用于设置你要唤醒的线程ID,在设置好ID以后,
    notifyAll唤醒全部,
    在线程里再判断是不是应该唤醒的线程!
      

  4.   

    1、java中没有直接的方法唤醒指定的线程。
    2、楼上的思路不知道实现过没有?问题是如何知道目的ID。
    3、如果学习线程就不要从哲学家就餐入手,教学经典是生产者-消费者线程。哲学家就餐是算法问题。
      

  5.   

    自己在线程的实现里面使用 boolean 变量啊!!
    例如,
     public void run()
     {
       while (!waitFlag) { wait(); } ....
     } public void setSleet(){ waitFlag=true; } public void setWake() { waitFlag = false; }你应该知道自己想要唤醒哪个线程啊!!掉那个线程的 setWake 方法吧!! 还有问题的话,再找我!!^_^
      

  6.   

    上面的 wait 忘记增加 synchronized 段了!!^_^ !!
      

  7.   

    我参考的是Andrew S. Tanenbaum 的《现代操作系统》
    书上的伪代码中有一个临界区的概念。
    如果不能进入临界区,线程也要阻塞。
    这时如何区分唤醒信号到底是给谁的呢?如果唤醒错了线程(确实会出错),就造成了死锁。
    现在用了一个折中的办法:就是设定了线程阻塞的时间,每隔一定时间强制唤醒,检查是否需要继续阻塞。
    但总觉得不是很完美。
      

  8.   

    notify
    唤醒的线程是随机的呀!