/*
/------------------------
/ author: zhouhp
/ date: 2007-4-10
/ email: zhp_hlm@163.com
/ MSN: zhp_hlm@163.com
/-----------------------------------------------
/ This class is a queue cache in multithreading,
/ it store object at tail,and remove object at
/ head,and it is thread-safe.
/-------------------------------------
*/
package com.zhp.util;
import java.util.LinkedList;
import java.lang.InterruptedException;
public class Cache
{
private LinkedList cache = new LinkedList();
private int cacheSize = 10;
public Cache()
{
}
public Cache(int cacheSize)
{
this.cacheSize = cacheSize;
}
public synchronized Object getCache() throws InterruptedException
{
System.out.println("Cache.getCache() method start!");
Object object = null;
while(true)
{
if(!cache.isEmpty())
{
object = cache.removeLast();
notifyAll();
break;
}
else
{
try
{
wait();
}
catch(InterruptedException e)
{
System.out.println("Cache.getCache() method is interrupted and end!");
throw e;
}
}
}
System.out.println("Cache.getCache() method end!");
return object;
}
public synchronized void setCache(Object object) throws InterruptedException
{
System.out.println("Cache.setCache() method start!");
while(true)
{
if(cache.size() >= cacheSize)
{
try
{
wait();
}
catch(InterruptedException e)
{
System.out.println("Cache.setCache() method is interrupted and end!");
throw e;
}
}
else
{
cache.addFirst(object);
notifyAll();
break;
}
}
System.out.println("Cache.setCache() method end!");
}
public String toString()
{
return cache.toString();
}
}