黑马程序员技术交流社区
标题:
如何获取多线程中wait()线程的name
[打印本页]
作者:
heheka123
时间:
2014-4-2 18:29
标题:
如何获取多线程中wait()线程的name
本帖最后由 heheka123 于 2014-4-3 14:40 编辑
/*有一个南北走向的桥,只能容纳一人过桥,现在桥的两边分别有5人,6人,编制一个多线程
让这些人到达彼岸。
程序如下;
问题,我想在wait()前添加一个System.out.println(Thread.currentThread().getName());
打印出是哪一个线程wait了,但是老没有结果,那位高人帮忙解决一下,谢谢
*/
class Person extends Thread
{
Bridge bridge;//桥对象
String id;
public Person(String id,Bridge bridge)
{
this.bridge=bridge;
this.id=id;
}
public void run()
{
bridge.getBridge();//等待过桥
System.out.println(Thread.currentThread().getName()+id+"正在过桥");
try
{
Thread.sleep((int)(Math.random()*10000));//模拟过桥所需时间
}
catch (InterruptedException e){}
bridge.goDownBridge();//下桥
}
}
class Bridge
{
private boolean engaged=false;//桥的占用状态
public synchronized void getBridge()//取得上桥资格
{
while(engaged)
{
try
{
System.out.println(Thread.currentThread().getName()+"wait...");//..................................就是这一句!
wait();
}
catch (InterruptedException e){}
engaged=true;
}
}
public synchronized void goDownBridge()
{
engaged=false;
notifyAll();
}
}
public class PassBridge
{
public static void main(String[] args)
{
Bridge b=new Bridge();
Person x;
for(int i=1;i<7;i++)
{
x=new Person("南边,第"+i+"人",b);
x.start();
}
for(int i=1;i<6;i++)
{
x=new Person("北边边,第"+i+"人",b);
x.start();
}
System.out.println("线程创建over!!。。。。。。。。");
}
}
复制代码
作者:
ehuashao
时间:
2014-4-2 20:11
while(engaged)
{
try
{
System.out.println(Thread.currentThread().getName()+"wait...");//..................................就是这一句!
wait();
}
catch (InterruptedException e){}
engaged=true;
}
复制代码
把engaged=true,放到while语句之外,否则engaged永远为false,它永远都执行不到。另外还建议
public void run()
{
bridge.getBridge();//等待过桥
System.out.println(Thread.currentThread().getName()+id+"正在过桥");
try
{
Thread.sleep((int)(Math.random()*10000));//模拟过桥所需时间
}
catch (InterruptedException e){}
bridge.goDownBridge();//下桥
}
复制代码
这段代码最好也同步起来。不然当第一个人去执行 System.out.println(Thread.currentThread().getName()+id+"正在过桥");这句代码后,桥的状态已经被改为占用,这时候出现极端情况,它被挤出cpu,再也抢不到cpu的执行机会,那么桥的状态就会一直是占用,而其他线程也只能永远等待了。个人理解,不对的地方,欢迎讨论。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2