日期:2014-05-20  浏览次数:20670 次

java 如何释放处于wait的对象?

缓存类部分代码如下

Java code

        private long time;
    
    /**
     * 存放数据
     * @param bytes
     * @return
     */
    public synchronized boolean putData(byte[] bytes){
        try {
            while(this.isFull()){
                time=System.currentTimeMillis(); //用以验证缓存满的时间
                this.wait();
            }
            time=0L;
            this.notify();
        } catch (InterruptedException e) {
            e.printStackTrace();
            return false;
        }
        this.buff.put(bytes);
        return true;
    }


如果缓存长时间处于满的状态,即数据已经发生错误了,我现在想把这个缓存对象给释放掉,应该怎么做?
将该对象置为null后,我发现还一直对于wait中
将该对象notify 后,因为判满 用的是循环 while,还会进入循环,还会wait
请教各位有什么方法,能释放处于wait的对象

------解决方案--------------------
interrupt,不过能不能找到要interrupt的线程呢
------解决方案--------------------
你这个程序的逻辑有点错乱吧?

首先是:没看出来在full的情况下,你是怎么主动去清空缓存的?

其次是:负责唤醒wait的,应该是在 remove 或者 delete 这类方法里面吧?
------解决方案--------------------
while(this.isFull()){
time=System.currentTimeMillis(); //用以验证缓存满的时间
this.wait();
你在这里不是都判断到满的临界了
然后在这里就可以直接将该对象置为null,再System.gc();
------解决方案--------------------
你负责释放对象的进程中,对象释放完毕后,要调用:
synchronized (obj) {
obj.notifyAll();
}

当然这里有个问题,就是 obj 对象跟你之前的那个 this,必须是一个东西,否则是没意义的。