当前位置: 代码迷 >> J2SE >> java 怎么释放处于wait的对象
  详细解决方案

java 怎么释放处于wait的对象

热度:84   发布时间:2016-04-24 00:27:35.0
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,必须是一个东西,否则是没意义的。
  相关解决方案