缓存类部分代码如下
- 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,必须是一个东西,否则是没意义的。