Thread----ExecutorService

来源:互联网 发布:七天网络阅卷公司 编辑:程序博客网 时间:2024/06/05 05:27

Thread


* 继续积累,网上看到一篇不错的文章,对于基础薄弱的我来说很有帮助,在此做一个笔记,希望自己能不断提升!*

直接贴贴上我的练习代码,欢迎看官指教。

package com.liumeng.doit;import java.util.concurrent.Executor;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * @author LiuMeng 线程练习 * ************************************************************ * 原版:http://www.trinea.cn/android/java-android-thread-pool/ * ************************************************************ * 【仿版】 * (去除修饰性语言.....) * new Thread的弊端: *     new Thread(new Runnable(){ *     @Override *     public void run(){ *      *     } *     }).start(); * 弊端: 1.每次new Thread新建对象性能差 *     2.线程缺乏统一管理,可能无限制新建线程 ,相互之间竞争,及可能占用过多系统资源导致死机或oom *     3.缺乏更多功能,如定时执行,定期执行,线程中断 * 相比new Thread,Java提供的四种线程池的好处在于: *     1.重用存在的线程,减少对象创建消亡的的开销,性能佳 *     2.可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 *     3.提供定时执行,定期执行,单线程,并发数控制等功能 * *************************************************************************************************** *   *   Java线程池 * Java通过Executor提供四种线程池,分别为: * 一、newCachedThreadPool: 创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活收回空闲线程,若无可回收,则新建线程 * 二、newScheduledThreadPool: 创建一个定长线程池,支持定期及周期性任务执行 * 三、newSingleThreadPool: 创建一个单线程化的线程池,他只会用唯一的工作线程来执行任务,保证所有的任务按照指定的顺序(FIFO,LIFO,优先级)执行 * 四、newFixedThreadPool: 创建一个定长线程池,可控制最大并发数,超出的线程在队列中等待 * ************************************************************************************************** *  *  */public class ThreadTest {    static ExecutorService fixedThread = Executors.newFixedThreadPool(3);    /**     * @param args     */    public static void main(String[] args) {        cachedThread();        fixedThread();        scheduledThread();    }     // 缓存线程池    static ExecutorService cachedThread = Executors.newCachedThreadPool();    public static void cachedThread() {        cachedThread.execute(new Runnable() {            public void run() {                for (int i = 0; i < 100; i++) {                    final int index = i;                    try {                        Thread.sleep(1000);                    } catch (Exception e) {                        // TODO: handle exception                    }                    System.out.println("SECOND:"+index+"s");                }            }        });    }    // 定时线程池//----------延时执行任务    static ScheduledExecutorService scheduledThread = Executors            .newScheduledThreadPool(5);    static int i = 0;    public static void scheduledThread() {        scheduledThread.schedule(new Runnable() {            public void run() {                // TODO Auto-generated method stub                System.out.println("3s后执行一次:" + (i++));            }        }, 3, TimeUnit.SECONDS);        scheduledThread.scheduleAtFixedRate(new Runnable() {            public void run() {                // TODO Auto-generated method stub                System.out.println("10s之后开始执行,然后每隔三秒执行一次:" + (i++));            }        }, 10, 3, TimeUnit.SECONDS);    }    // 定长线程池    public static void fixedThread() {        for (int i = 0; i < 100; i++) {            final int index = i;            fixedThread.execute(new Runnable() {                public void run() {                    try {                        System.out.println("fixedThread:" + index);                        Thread.sleep(2000);                    } catch (InterruptedException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }            });        }    }//  }

欢迎指教!本人小白,谢谢!

0 0