package com.mtools.gc.test;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import com.mtools.core.plugin.entity.MenuInfo;
public class GCtest {
ExecutorService threadPool = Executors.newFixedThreadPool(105);
Semaphore sem=new Semaphore(5);
/**
* 尽管在不断的创建新的对象,但是不会导致内存溢出,原因:jvm会进行垃圾回收
* @param args
*/
public static void main(String[] args) {
try {
int count=0;
// while (count<1999999) {
// sem.acquire();
// new ArrayList<String>();
GCtest gc=new GCtest();
gc.runMutiThreads();
// TransThread trd =gc.new TransThread(gmenu);
// threadPool.execute(trd);
// new Thread(trs).start();
// sem.release();
// }
System.err.println("over");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void runMutiThreads() throws InterruptedException{
MenuInfo gmenu=new MenuInfo();
gmenu.setMenuname("test");
for(int a=0;a<1999999;a++){
// if(sem.availablePermits() < 0){
// System.err.println("not ava");
// }
//
// sem.acquire();
TransThread trd =new TransThread(null,a);
// new Thread(trd).start();
threadPool.execute(trd);
// sem.release();
}
threadPool.shutdown();
System.err.println("threadPool over");
}
class TransThread implements Runnable{
MenuInfo menu;
int a;
public TransThread(MenuInfo menu, int a){
super();
this.menu=menu;
this.a=a;
}
@Override
public void run() {
try {
// Thread.sleep(000);
System.out.println("-"+this.a+"-"+Thread.currentThread().getName()+" is running...");
// System.out.println(menu.getMenuname()+"-"+this.a+"-"+Thread.currentThread().getName()+" is running...");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}