本帖最后由 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!!。。。。。。。。");
- }
- }
复制代码 |
|