比while(true)主动高效,省力的监听------被动监听
java吧
全部回复
仅看楼主
level 6
lbj2004032 楼主
现在又一个list 每当有对象加入list.add()的时候由多线程去监听执行某些事
1.while(true)形式的监听,浪费资源,
Queue list = new LinkedBlockingQueue();
while(true){
   try{
      Thread.sleep(1000);//一秒钟查看一次
      if(!list.isEmpty()){
         System.out.println("do something");
      }
   }catch(Exception e){
//     ...
}
}
2.阻塞形式
   public class Listener{
      private Object wait_object = new Object();
      Queue list = new LinkedBlockingQueue();
      private Runnable run = new Runnable(){
           public void run(){
               while(!list.isEmpty()){
                   System.out.println("do something");
               }
               synchronized(wait_object){
                  System.out.println("睡着。。。");
                  wait_object.wait();
                   wait_object.wait("醒来。。。");
               }
           }
      };
      public void wakeUp(){
          list.add("object");
           synchronized(wait_object){
                   wait_object.notifyAll();
           }
      }
     public void start(){
        new Thread(run).start();
     }
}
当发生list.add()时候,调用Listener的wakeUp();
例如
public class TestMain{
Listener listen = new Listener();
listen.start();
Thread.sleep(5000);//5秒后唤醒
listen.wakeUp();
}

2010年07月06日 09点07分 1
1