关于线程唤醒问题 notify好象不能指定特定的啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实是想用JAVA模拟哲学家就餐问题。不知道如何对于特定信号量唤醒进程。 以下代码只用于演示,还不完善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(); }} 在线程里增加一个共享变量用于设置你要唤醒的线程ID,在设置好ID以后,notifyAll唤醒全部,在线程里再判断是不是应该唤醒的线程! 1、java中没有直接的方法唤醒指定的线程。2、楼上的思路不知道实现过没有?问题是如何知道目的ID。3、如果学习线程就不要从哲学家就餐入手,教学经典是生产者-消费者线程。哲学家就餐是算法问题。 自己在线程的实现里面使用 boolean 变量啊!!例如, public void run() { while (!waitFlag) { wait(); } .... } public void setSleet(){ waitFlag=true; } public void setWake() { waitFlag = false; }你应该知道自己想要唤醒哪个线程啊!!掉那个线程的 setWake 方法吧!! 还有问题的话,再找我!!^_^ 上面的 wait 忘记增加 synchronized 段了!!^_^ !! 我参考的是Andrew S. Tanenbaum 的《现代操作系统》书上的伪代码中有一个临界区的概念。如果不能进入临界区,线程也要阻塞。这时如何区分唤醒信号到底是给谁的呢?如果唤醒错了线程(确实会出错),就造成了死锁。现在用了一个折中的办法:就是设定了线程阻塞的时间,每隔一定时间强制唤醒,检查是否需要继续阻塞。但总觉得不是很完美。 notify唤醒的线程是随机的呀! JPA 主子表 如何一起保存? 急救:JSP中调用(J2SE写的坦克大战,有7个类,一个主函数)!! PL/SQL中的for循环问题,在线等! 为什么我的java文件不了 哪位兄弟有jspSmartUpload的正版源代码(不是反编译的)?发我一份吧.....(急急急) 请教一下java有没有播放MP3相关的类阿? 想学习一些比较经典的Java开源项目,众高手有没有推荐的? 各位大哥救我! 哪里有可视化的jCheckTree组件? help,help,help? Eclipse插件 关于protected的问题?
{
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();
}
}
notifyAll唤醒全部,
在线程里再判断是不是应该唤醒的线程!
2、楼上的思路不知道实现过没有?问题是如何知道目的ID。
3、如果学习线程就不要从哲学家就餐入手,教学经典是生产者-消费者线程。哲学家就餐是算法问题。
例如,
public void run()
{
while (!waitFlag) { wait(); } ....
} public void setSleet(){ waitFlag=true; } public void setWake() { waitFlag = false; }你应该知道自己想要唤醒哪个线程啊!!掉那个线程的 setWake 方法吧!! 还有问题的话,再找我!!^_^
书上的伪代码中有一个临界区的概念。
如果不能进入临界区,线程也要阻塞。
这时如何区分唤醒信号到底是给谁的呢?如果唤醒错了线程(确实会出错),就造成了死锁。
现在用了一个折中的办法:就是设定了线程阻塞的时间,每隔一定时间强制唤醒,检查是否需要继续阻塞。
但总觉得不是很完美。
唤醒的线程是随机的呀!