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

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

什么时线程池?
线程池是指在初始化一个多线程应用程序中创建的一个线程集合,然后在执行新的任务的时重用这些线程而不是重新创建一个线程,线程池中的线程数量完全取决于可用内存数量和运用程序的需求,然而增加可用线程数是可能的,线程池中每一个线程都有分配一个任务,一旦任务执行完后,会回到池子中并等待下一次的任务分配
 
 
1.创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
//最常用的线程池
package com.jlong;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class NewCachedThreadTest {
    public static void main(String[] args) {
        //创建可缓存线程
        ExecutorService executorService = Executors.newCachedThreadPool();
        //执行execute表示创建了线程 类似start()
        for (int i = 0; i <30 ; i++) {
            int index=i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread()+"----"+index);
                }
            });
        }
    }
}
 
2.创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
 
package com.jlong;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class NewFiexdThreadPoolTest {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        for (int i = 0; i <30 ; i++) {
            int index=i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
 
                    try {
                        Thread.sleep(500);
                        System.out.println(Thread.currentThread()+"----"+index);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}
3.创建一个定长线程池,支持定时及周期性任务执行。延迟执行
package com.jlong;
 
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
 
public class NewScheduledThreadTest {
    public static void main(String[] args) {
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(6);
        scheduledExecutorService.schedule(new Runnable() {
            @Override
            public void run() {
                System.out.println("三秒钟后执行。。。。。");
            }
        },3, TimeUnit.SECONDS);
 
    }
}
 
4.单线程,几乎没有用到
 
package com.jlong;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class NewSingleThreadExecutorTest {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 30; i++) {
            int index=i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"------"+index);
                }
            });
        }
    }
}

转载于:https://www.cnblogs.com/goldlong/p/10953933.html

你可能感兴趣的文章
【SVN】总结(1):svn常见问题(2016-01-06)
查看>>
DevOps顾问行业开始快速增长
查看>>
Win10强势,微软必应搜索广告业务增长21%
查看>>
工信部公布29款问题手机App:极速WiFi万能钥匙上榜
查看>>
最具创新能力企业评选 苹果再度登顶
查看>>
2017年直播群雄逐鹿:社交直播会否收割行业未来?
查看>>
数据中心运维需要的三大认证
查看>>
诺基亚推物联网解决方案:创造可编程的世界
查看>>
如何利用开发者账号重签ipa文件,并部署到IOS设备做测试
查看>>
HPE实验室打造怪兽级The Machine内存系统
查看>>
云端应用监控服务商Datadog融资9450万美元
查看>>
《Web测试囧事》——1.4 利用JavaScript加载的漏洞提前购买抢购商品
查看>>
Line推出新语音群聊功能 最多支持200人
查看>>
通用功能测试用例
查看>>
汉能薄膜太阳能技术将国家电投大楼变身节能光伏建筑
查看>>
CloudCC CRM探讨中国云计算市场现状
查看>>
借助RDMA功能的互连实现您企业软件定义的数据中心基础设施的效率最大化
查看>>
关于视频编码器的作用详细介绍
查看>>
美国/韩国/荷兰/新加坡/德国的智慧城市发展现状
查看>>
基于SDN的云网协同是运营商混合云组网利器
查看>>