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