java中创建线程池的四种方式

java中创建线程池的四种方式

话不多说,直接上代码,可以先分析再运行,结合运行结果最有说服力

public class CreateThreadPool {
	public static void main(String[] args) {
		
/*Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
*/
		/*通过chcaedThreadPool创建线程池*/
		/*ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
		for (int i = 0; i < 10; i++) {  
            final int index = i;  
            try {  
                Thread.sleep(500);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
            cachedThreadPool.execute(new Runnable() {  
                public void run() {  
                    System.out.println(index);  
                }  
            });  
		}*/
		
		/*fixedThreadPool创建线程池*/
		 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);  
	        for (int i = 0; i < 10; i++) {  
	            final int index = i;  
	            fixedThreadPool.execute(new Runnable() {  
	                public void run() {  
	                    try {  
	                        System.out.println(index);  
	                        Thread.sleep(1000);  
	                    } catch (InterruptedException e) {  
	                        e.printStackTrace();  
	                    }  
	                }  
	            });  
	        }  

	        /*scheduledThreadPool创建线程池*/
	        /*ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);  
	        for (int i = 0; i < 10; i++) {
	        	final int index = i;
	            scheduledThreadPool.schedule(new Runnable() {  
	                public void run() {  
	                	try {
							Thread.sleep(1000);
							System.out.println("-----");
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	                    System.out.println("delay 3 seconds---->"+index);  
	                    
	                }  
	            }, 1, TimeUnit.SECONDS);  
	        } */
	        
	        /*singleThreadExecutor创建线程池*/
	        /*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(1000);  
	                    } catch (InterruptedException e) {  
	                        e.printStackTrace();  
	                    }  
	                }  
	            });  
	        }*/
	        
	        

	}

}

出于偷懒,我把四种线程池创建方式都放在一个main方法中,测试一个运行一个,不测试的就给注释掉。下面分别贴出运行结果

通过chcaedThreadPool创建线程池,根据代码可知道一秒钟创建一个线程
java中创建线程池的四种方式_第1张图片

fixedThreadPool创建线程池,这是定长数据库,参数即是同时执行最大线程数,则输出结果应该是三个为一组,知道全部输出完毕
java中创建线程池的四种方式_第2张图片

scheduledThreadPool创建线程池,这是周期性创建线程池,随机
java中创建线程池的四种方式_第3张图片

singleThreadExecutor创建线程池,常见一个单核心线程池,只有一个线程工作,所以一秒创建一个线程
java中创建线程池的四种方式_第4张图片
越努力,越幸运。不断学习,不断进步!

你可能感兴趣的:(java基础,创建线程池)