博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程池
阅读量:4355 次
发布时间:2019-06-07

本文共 3363 字,大约阅读时间需要 11 分钟。

1、引入线程池的好处

  a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。

  b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
  c. 提供定时执行、定期执行、单线程、并发数控制等功能。

2、java提供的线程池

  Java通过Executors提供四种线程池,分别为:

    newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
    newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
    newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
    newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

package test;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class ThreadPoolExecutorTest {    public static void main(String[] args) {        Timer timer =new Timer();        timer.schedule(new TimerTask() {                        @Override            public void run() {                System.out.println(Thread.currentThread().getName());                }        }, 5000);                                                        //这里最大应该可以开21亿个线程, 短任务        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();        //        for (int i = 0; i < 1000000000; i++) {//            cachedThreadPool.execute(new Runnable() {//                @Override//                public void run() {//                    try {//                        Thread.currentThread().sleep(2000);//                    } catch (InterruptedException e) {//                        // TODO Auto-generated catch block//                        e.printStackTrace();//                    }//                    System.out.println(Thread.currentThread().getName());//                }//            });//        }                        //没有用线程池技术//        for (int i = 0; i < 100; i++) {//            new Thread(new Runnable() {//                @Override//                public void run() {//                    System.out.println(Thread.currentThread().getName());//                    //                }//            }).start();//        }                        //按照固定的数目         ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10);//         for (int i = 0; i < 1000; i++) {//             final int index =i;//             fixedThreadPool.execute(new Runnable() {//                @Override//                public void run() {//                    System.out.println(Thread.currentThread().getName()+" "+index);//                    //                }//            });//        }                  //默认一个         ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();//        for (int i = 0; i < 10; i++) {//            final int index = i;//            //放了十个线程//            fixedThreadPool.execute(new Runnable() {//                public void run() {//                    System.out.println(index+Thread.currentThread().getName());//                }//            });//        }//        fixedThreadPool.shutdown();//        //        //延迟持续,重复执行//        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);//         scheduledThreadPool.scheduleAtFixedRate(new Runnable() {//            @Override//            public void run() {//                System.out.println("111111");//            }//        },0,1,TimeUnit.SECONDS);    }}

 

转载于:https://www.cnblogs.com/ysmdbk/p/11262946.html

你可能感兴趣的文章
POJ 1321 棋盘问题(状态压缩DP | DFS)
查看>>
LA3902 Networlk
查看>>
BZOJ1511: [POI2006]OKR-Periods of Words
查看>>
docker常用命令
查看>>
熔断器设计模式
查看>>
WMAP 启动报错 PHP- 提示缺少 msvcr110.dll 的问题
查看>>
linux的chmod,chown命令详解
查看>>
Excel VBA 基本概念
查看>>
testlink的那些坑
查看>>
2019-04-17 快速备份存储过程
查看>>
PAT A1115 Counting Nodes in a BST (30 分)——二叉搜索树,层序遍历或者dfs
查看>>
汤姆叔叔的小屋
查看>>
第二周 1 时间换算(5分)
查看>>
定义label标签宽度需要设置display:inline-block;
查看>>
OUC_Summer Training_ DIV2_#2之解题策略 715
查看>>
Centos6.8搭建Git服务(git版本可选)(转)
查看>>
转载:Linux下用mutt给QQ邮箱发匿名邮件
查看>>
[模版]平衡树splay2
查看>>
sed匹配多行并替换其中的内容
查看>>
android中数据库的介绍及实例
查看>>