public class Pool {
private static Pool pool = new Pool();
private int count ;
private int mount = 80 ;
private Pool(){}
public static Pool getInstance(){
return pool;
}
public synchronized int get(){
if(count>=mount) return -1 ;
return ++count ;
}
}
Test.java
import java.util.ArrayList;
import java.util.List;
public class Test implements Runnable{
private Pool pool = Pool.getInstance();
private List<Integer> list = new ArrayList<Integer>();
private static byte[] lock = new byte[0];
private static int count = 0 ;
private static Thread hook = new Thread(){
public void run() {
System.out.println( count );
}
};
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook( hook );
for(int i = 0 ; i<10000;i++){
Runnable r = new Test();
Thread t = new Thread(r);
t.start();
}
}
@Override
public void run() {
while(true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
int get = pool.get() ;
if(get==-1) break;
list.add(get);
}
synchronized (lock) {
count += list.size();
}
System.out.println(Thread.currentThread().getName()+"\t :" + list.size() + "\t " + list);
}
}