/-----------------------------------------------
/ This class is a queue cache in multithreading,
/ it store object at tail,and remove object at
/ head,and it is thread-safe.
/-------------------------------------
*/
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();
}
public static void main(String arg[]){
SingletonObj so = SingletonObj.getInstance(); //其中SingletonObj是一个单态类
ArrayList al = so.getArrayListValue();
Hua c = new Hua();
try{
c.setCache(al);
}catch(Exception ex){
}
ArrayList al1 = new ArrayList();
try{
al1 = (ArrayList)c.getCache();
for(int i = 0;i<al1.size();i++)
System.out.println(al1.get(i));
}catch(Exception ex){
}
}
SingletonObj.java 程序
public class SingletonObj {
ArrayList al = new ArrayList();
private SingletonObj(){
//数据
for(int i = 0; i < 100; i ++){
al.add("wl"+i);
}
}
private static SingletonObj so = new SingletonObj();
public static SingletonObj getInstance(){
return so;
}
public ArrayList getArrayListValue(){
return al;
}
}