zoukankan      html  css  js  c++  java
  • Java多线程——Executors和线程池

    线程池的概念与Executors类的应用

      1.创建固定大小的线程池

    package java_thread;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    
    public class ThreadPoolTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		ExecutorService threadPool = Executors.newFixedThreadPool(3);
    //		ExecutorService threadPool = Executors.newCachedThreadPool();
    //		ExecutorService threadPool = Executors.newSingleThreadExecutor();
    		for(int i=1;i<=10;i++){
    			final int task = i;
    			threadPool.execute(new Runnable(){
    				@Override
    				public void run() {
    					for(int j=1;j<=4;j++){
    						try {
    							Thread.sleep(20);
    						} catch (InterruptedException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						}
    						System.out.println(Thread.currentThread().getName() + " is looping of " + j + " for  task of " + task);
    					}
    				}
    			});
    		}
    		System.out.println("all of 10 tasks have committed! ");
    		//threadPool.shutdownNow();
    		
    //		Executors.newScheduledThreadPool(3).scheduleAtFixedRate(
    //				new Runnable(){
    //					@Override
    //				public void run() {
    //					System.out.println("bombing!");
    //					
    //				}},
    //				6,
    //				2,
    //				TimeUnit.SECONDS);
    	}
    
    }
    

      2.创建缓存线程池

    ExecutorService threadPool = Executors.newCachedThreadPool();
    

     3.创建单一线程池

    ExecutorService threadPool = Executors.newSingleThreadExecutor();
    

     

    关闭线程池

      shutdown与shutdownNow的比较

    threadPool.shutdownNow();
    

    用线程池启动定时器

      调用ScheduledExecutorService的schedule方法,返回的ScheduleFuture对象可以取消任务。

      支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式。

    		Executors.newScheduledThreadPool(3).scheduleAtFixedRate(	//多久气候执行,每隔多久执行
    				new Runnable(){
    					@Override
    				public void run() {
    					System.out.println("bombing!");
    					
    				}},
    				6,
    				2,
    				TimeUnit.SECONDS);
    
  • 相关阅读:
    在非MFC的win 32程序里面能够使用CString类
    一 VC2008环境中ICE的配置
    二 示例程序一
    三 ICE开发初级研究
    VC断点不可用的问题
    Ice笔记-利用Ice::Application类简化Ice应用
    GetCurrentDirectory、SetCurrentDirectory和GetModuleFileName
    Xcopy参数介绍
    COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下)
    JackSon fasterxml学习
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/6262640.html
Copyright © 2011-2022 走看看