要求类似于java系统的垃圾处理机制,因为该机制对程序的运行好像并没有大的cpu占用,但用无限循环的方法就占用了很大的cpu来处理,所以很想知其是怎样实现的?

解决方案 »

  1.   

    效率最高的方法是用信号量的方法: wait(),notify(),不用总是没完没了的检测变量的状态,在run()方法中用Boolean.wait()等待直到有事件触发使变量的值变为true,然后在30秒内状态无翻转,则置为null,否则重新开始等待即可。            (On Contact [email protected])
      

  2.   

    用信号量的话,那怎样检测法,是不是一定要在用到连接的那个类中来notify这个线程啊?
      

  3.   

    有两种用信号量的方法,一种是定义inner class,另一种是将一个类的instance作为一个参数在构造方法中传递到另一个类.
      

  4.   

    作为参数就明白,但第一种定义inner class,是怎么定义的,我还未用过这种class,可不可以说一下用法及用途?
      

  5.   

    public void run(){
        while(true){
            if(xclass.getXState()){
                //还不知怎样处理连接维持30秒?
                xclass.setXNull();
            }    }
    }
      

  6.   

    public void run(){
        //开始计时
        long begintime = System.currentTimeMillis();
        while(true){
            if(xclass.getXState()){
                //判断当前时间是否大于30秒
                long usedTime = System.currentTimeMillis() - beginTime;
                if (usedTime > 30000)
                   xclass.setXNull();
            }
           sleep(100);
        }
    }
      

  7.   

    inner class就是"类中类",是在Java 2中提出的新概念.例如,一个人体的inner class可以定义为如下形式:
    public class Body{
             class Head{
               class Mouth{
                 //...
               } 
               class Nose{
                  //... 
                }
               class Eyes{
                  //...
                }
               //...
              }
             class Leg{
               //...
             }
             //...
            }
           }你提出的问题的解答(不完整):
       Object S = new Object();
     
       void methodThatMayChangeState()
       {
             //TODO: 改变状态
             S.notify(); 解挂阻塞在信号量上的线程
             //....
        }
     
       public void run()
       {
         do{       
           S.wait(); //该线程在这里挂起,由此不用再使用CPU,直到有其他
                     //S.notify()执行到
           //TODO: 30秒内无等待则continue
         }while(true);            //....
        }