자바 스 레 드 탱크 의 테스트 와 분석
package cn.smallbug.jdk.concurrent.exe;
import java.io.Serializable;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor.DiscardPolicy;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.Test;
public class TestThreadPoolExecutor {
private ThreadPoolExecutor pool = null;
@Before
public void before() {
this.pool = new ThreadPoolExecutor(//
/**
* corePoolSize( ):<br />
* , ,
* , 。
* prestartAllCoreThreads , 。
*/
10,
/**
* maximumPoolSize( ):<br />
* 。 , , 。
* 。
*/
20,
/**
* keepAliveTime( ):<br />
* , 。
*/
1000,
/**
* TimeUnit( ):<br />
* :<br />
* <ul>
* <li> (DAYS)</li>
* <li> (HOURS)</li>
* <li> (MINUTES)</li>
* <li> (MILLISECONDS)</li>
* <li> (MICROSECONDS, )</li>
* <li> (NANOSECONDS, )</li>
* </ul>
*/
TimeUnit.MILLISECONDS, // 1000ms,
/**
* runnableTaskQueue( ):<br />
* 。 :
* <ul>
* <li><b>ArrayBlockingQueue:</b> ,
* FIFO( ) 。</li>
* <li><b>LinkedBlockingQueue:</b> , FIFO ( )
* , ArrayBlockingQueue。 Executors.
* newFixedThreadPool() 。</li>
* <li><b>SynchronousQueue:</b>
* 。 ,
* , LinkedBlockingQueue, Executors.
* newCachedThreadPool 。</li>
* <li><b>PriorityBlockingQueue:</b> 。</li>
* </ul>
*/
new ArrayBlockingQueue<Runnable>(100),
/**
* ThreadFactory:<br />
* , ,Debug 。
*/
// new CreateThread(),
/**
* RejectedExecutionHandler( ):<br />
* , , 。
* AbortPolicy, 。 JDK1.5
* <ul>
* <li>CallerRunsPolicy: 。</li>
* <li>DiscardOldestPolicy: , 。</li>
* <li>DiscardPolicy: , 。</li>
* <li> RejectedExecutionHandler 。
* 。</li>
* </ul>
*/
new DiscardPolicy()//
);
}
/**
* execute
*
* @timestamp Mar 19, 2016 3:08:56 PM
*/
@Test
public void testExecute() {
pool.execute(new Runnable() {
@Override
public void run() {
System.out.println(2 + 2);
}
});
}
/**
* execute
*
* @timestamp Mar 19, 2016 3:11:21 PM
*/
@Test
public void testSubmit() {
int i = 100;
while (i-- > 0) {
pool.submit(//
new Callable<Serializable>() {
@Override
public Serializable call() throws Exception {
return 2 + 2;
}
}//
);
}
Future<Serializable> result = pool.submit(//
new Callable<Serializable>() {
@Override
public Serializable call() throws Exception {
return 2 + 2;
}
}//
);
Serializable s = null;
try {
s = (int) result.get();
} catch (InterruptedException e) {
//
e.printStackTrace();
} catch (ExecutionException e) {
//
e.printStackTrace();
} finally {
stastic(pool);
/**
* 1、 SHUTDOWN <br />
* 2、
*/
pool.shutdown();
/**
* 1、 STOP<br />
* 2、 <br />
* 3、 interrupt ( )<br />
* 4、
*/
// pool.shutdownNow();
/**
* ,isShutdown true<br />
* , , isTerminaed true<br />
* shutdown , , shutdownNow
*/
}
System.out.println(s);
}
/**
* <br />
* beforeExecute <br />
* afterExecute <br />
* terminated <br />
* , , 。 , 。
*
* @timestamp Mar 19, 2016 3:37:29 PM
* @param pool2
*/
private void stastic(ThreadPoolExecutor pool) {
System.out.println("current cpu num -> " + Runtime.getRuntime().availableProcessors());
System.out.println(" -> " + pool.getTaskCount());
System.out.println(" 。 taskCount -> " + pool.getCompletedTaskCount());
System.out.println(" -> " + pool.getLargestPoolSize());
System.out.println(" 。 , , -> " + pool.getPoolSize());
System.out.println(" -> " + pool.getActiveCount());
}
/**
*
*
* @timestamp Mar 19, 2016 3:01:24 PM
* @author smallbug
*/
class CreateThread implements ThreadFactory {
@Override
public Thread newThread(Runnable r) {
return new Thread() {
@Override
public void run() {
System.out.println(1 + 1);
}
};
}
}
}
참고 블 로그: 동시 다발 (3) 자바 스 레 드 탱크 의 분석 과 사용 에 대해 이야기 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.