读书人

java 怎么释放处于wait的对象

发布时间: 2012-08-13 13:21:53 作者: rapoo

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,必须是一个东西,否则是没意义的。

读书人网 >J2SE开发

热点推荐