线程池是什么?Java四种线程池的使用介绍( 二 )

< 10; i) {final int index = i;fixedThreadPool.execute(new Runnable() {public void run() {try {System.out.println(index);Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}});}}}因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字 。
定长线程池的大小最好根据系统资源进行设置 。如Runtime.getRuntime().availableProcessors()
(3) newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行 。延迟执行示例代码如下:
01package test;02import java.util.concurrent.Executors;03import java.util.concurrent.ScheduledExecutorService;04import java.util.concurrent.TimeUnit;05public class ThreadPoolExecutorTest {06public static void main(String[] args) {07ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);08scheduledThreadPool.schedule(new Runnable() {09public void run() {10System.out.println("delay 3 seconds");11}12}, 3, TimeUnit.SECONDS);13}14}复制代码package test;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class ThreadPoolExecutorTest {public static void main(String[] args) {ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);scheduledThreadPool.schedule(new Runnable() {public void run() {System.out.println("delay 3 seconds");}}, 3, TimeUnit.SECONDS);}}表示延迟3秒执行 。
定期执行示例代码如下:
01package test;02import java.util.concurrent.Executors;03import java.util.concurrent.ScheduledExecutorService;04import java.util.concurrent.TimeUnit;05public class ThreadPoolExecutorTest {06public static void main(String[] args) {07ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);08scheduledThreadPool.scheduleAtFixedRate(new Runnable() {09public void run() {10System.out.println("delay 1 seconds, and excute every 3 seconds");11}12}, 1, 3, TimeUnit.SECONDS);13}14}复制代码package test;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class ThreadPoolExecutorTest {public static void main(String[] args) {ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);scheduledThreadPool.scheduleAtFixedRate(new Runnable() {public void run() {System.out.println("delay 1 seconds, and excute every 3 seconds");}}, 1, 3, TimeUnit.SECONDS);}}表示延迟1秒后每3秒执行一次 。
(4) newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行 。示例代码如下:
01package test;02import java.util.concurrent.ExecutorService;03import java.util.concurrent.Executors;04public class ThreadPoolExecutorTest {05public static void main(String[] args) {06ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();07for (int i = 0; i < 10; i) {08final int index = i;09singleThreadExecutor.execute(new Runnable() {10public void run() {11try {12System.out.println(index);13Thread.sleep(2000);14} catch (InterruptedException e) {15e.printStackTrace();16}17}18});19}20}21}复制代码package test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadPoolExecutorTest {public static void main(String[] args) {ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();for (int i = 0; i < 10; i) {final int index = i;singleThreadExecutor.execute(new Runnable() {public void run() {try {System.out.println(index);Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}});}}}结果依次输出,相当于顺序执行各个任务 。
你可以使用JDK自带的监控工具来监控我们创建的线程数量,运行一个不终止的线程,创建指定量的线程,来观察:
工具目录:C:Program FilesJavajdk1.6.0_06binjconsole.exe

推荐阅读