今天时间学习Executors api,该类是JUC原子包中的类,通过单元测试代码把所有public api方法跑了一遍,大致了解了底层实现,初学乍练,有很多一知半解的地方,待后续有了深入理解再来补充
package test.java.util.concurrent;
import java.security.PrivilegedAction;
import java.security.PrivilegedExceptionAction;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
/**
* Executors的测试类
*
* @date 2020-07-16 21:37:41
*/
public class ExecutorsTest {
/**
* 固定线程数的线程池,ThreadPoolExecutor和LinkedBlockingQueue初始化
* @Param
*/
@Test
public void testNewFixedThreadPool1()throws Exception{
ExecutorService executor=Executors.newFixedThreadPool(2);
executor.submit(()-> {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
/**
*具有抢占式操作的线程池,ForkJoinPool和parallelism为并发数
* @Param
*/
@Test
public void testNewWorkStealingPool1()throws Exception{
ExecutorService executor=Executors.newWorkStealingPool(3);
executor.submit(()-> {
try {
System.out.println(3333);
// TimeUnit.SECONDS.sleep(1);
System.out.println(222);
} catch (Exception e) {
e.printStackTrace();
}
});
}
/**
*具有抢占式操作的线程池,ForkJoinPool和默认并发数为cpu数量
* @Param
*/
@Test
public void testNewWorkStealingPool()throws Exception{
ExecutorService executor=Executors.newWorkStealingPool();
executor.submit(()-> {
try {
System.out.println(3333);
// TimeUnit.SECONDS.sleep(1);
System.out.println(222);
} catch (Exception e) {
e.printStackTrace();
}
});
}
/**
* 初始化指定线程数的线程池,并且使用线程工厂类Executors.defaultThreadFactory()或privilege