当前位置: 首页 > news >正文

北京网站制作net2006济南市城乡建设局官网

北京网站制作net2006,济南市城乡建设局官网,中国移动网站建设,免费的自助建站标题java四种线程池及使用示例 1、线程工厂 1、我们先来写ThreadFactory,在创建线程池时候可以传入自定义的线程工厂,线程工厂说白了就是用来定制线程的一些属性:名字、优先级、是否为守护线程。直接看代码即可。 当然创建线程池的时候可以…

标题java四种线程池及使用示例

1、线程工厂

1、我们先来写ThreadFactory,在创建线程池时候可以传入自定义的线程工厂,线程工厂说白了就是用来定制线程的一些属性:名字、优先级、是否为守护线程。直接看代码即可。

当然创建线程池的时候可以不传入自定义线程工厂。

public class MyThreadFactory implements ThreadFactory {private static final String thread_prefix = "self_thread";private AtomicInteger integer = new AtomicInteger(0);private String threadName = null;public MyThreadFactory(String threadName) {this.threadName = threadName;}public MyThreadFactory() {}@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread(r);String name = threadName == null ? thread_prefix + " " + integer.getAndIncrement() : threadName + " " + integer.getAndIncrement();thread.setName(name);return thread;}
}

2、我们来详细看一下四种线程池

单一线程的线程池可缓存的线程池可周期性执行的线程池固定数目的线程池
.newSingleThreadExecutor.newCachedThreadPool.newScheduledThreadPool.newFixedThreadPool

1、单一线程的线程池:

此线程池只有一个线程,用仅有的一个线程来执行任务,保证所有的任务按照指定顺序(FIFO,LIFO,优先级)执行,所有的任务都保存在队列LinkedBlockingQueue中,等待唯一的单线程来执行任务。

    private static final Object lock = new Object();private static int count = 0;private static void testSingleThreadThreadPool() {ExecutorService service = Executors.newSingleThreadExecutor(new MyThreadFactory("singleThread"));for (int i = 0; i < 6; i++) {test(service);}}private static void test(ExecutorService service) {synchronized (lock) {count++;System.out.println(Thread.currentThread().getName());if (count == 5) {System.out.println("count == 5 shutdown ");service.shutdown();}}}

可以从输出看到,只new了一个线程。

2、可缓存的线程池

创建一个可缓存的无界线程池,如果线程池长度超过处理需要,可灵活回收空线程,若无可回收,则新建线程。当线程池中的线程空闲时间超过60s,则会自动回收该线程,当任务超过线程池的线程数则创建新的线程,线程池的大小上限为Integer.MAX_VALUE,可看作无限大。

   private static void testCachedThreadPool() {ExecutorService service = Executors.newCachedThreadPool(new MyThreadFactory("cached"));for (int i = 0; i < 1000; i++) { // 循环数稍微大一点 模拟线程回收后被复用service.submit(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName()); // 可从控制台看出相同线程名的线程}});}}

3、可周期性执行的线程池

    private static void testScheduleThreadPool() {/*** 可周期性执行的线程池 延迟2秒执行 每间隔4秒执行一次** 是“以固定的频率”执行,period(周期)指的是两次成功执行之间的时间。* 上一个任务开始的时间计时,一个period后,检测上一个任务是否执行完毕,* 如果上一个任务执行完毕,则当前任务立即执行,如果上一个任务没有执行完毕,* 则需要等上一个任务执行完毕后立即执行。*/ExecutorService service = Executors.newScheduledThreadPool(6, new MyThreadFactory());((ScheduledExecutorService) service).scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {test(service);}}, 2, 4, TimeUnit.SECONDS);// 定时  执行一次   的任务,延迟1s后执行((ScheduledExecutorService) service).schedule(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ", delay 1s");}}, 1, TimeUnit.SECONDS);/*** “以固定的延时”执行,delay(延时)指的是一次执行终止和下一次执行开始之间的延迟。*/((ScheduledExecutorService) service).scheduleWithFixedDelay(new Runnable() {@Overridepublic void run() {long start = new Date().getTime();System.out.println("scheduleWithFixedDelay 开始执行时间:" +DateFormat.getTimeInstance().format(new Date()));try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}long end = new Date().getTime();System.out.println("scheduleWithFixedDelay执行花费时间=" + (end - start) / 1000 + "m");System.out.println("scheduleWithFixedDelay执行完成时间:"+ DateFormat.getTimeInstance().format(new Date()));System.out.println();System.out.println();}}, 2, 3, TimeUnit.SECONDS);}

4、固定数目的线程池

这个就很好理解了。固定数量的线程。

    /*** 固定数量的线程池*/private static void testFixedThreadPool() {ExecutorService service = Executors.newFixedThreadPool(5, new MyThreadFactory());for (int i = 0; i < 8; i++) {service.submit(new Runnable() {@Overridepublic void run() {test(service);}});}}

5、方法对比

在这里插入图片描述

http://www.yayakq.cn/news/366575/

相关文章:

  • 被称为网站开发神器网站建设硬件设计方案
  • 建设部网站房地产资质新浪云WordPress 主题
  • 做英语四级题的网站dedecms免费模板
  • 浙江省建设厅网站地址咖啡网站设计模板
  • 抚州市建设局招标办网站宁阳移动网站制作
  • 衡水提供网站制作公司报价服务专业的网页制作
  • opencart网站学校网站建设的意见
  • 微网站建设加盟利用access数据库做网站
  • 东莞城乡建设网站网站建设投标人资质要求
  • 做最精彩的绳艺网站网站搭建的流程
  • 政务网站平台建设 招标网站数据库转移
  • 能打开各种网站的浏览器下载自己做的网站网页滑动不
  • 天津大学生专业做网站学历提升咨询
  • 电商网站开发实训心得阿里云安装wordpress出错求解
  • 网站是不是每年都要续费wordpress导入火车头
  • 仿唧唧帝笑话门户网站源码带多条采集规则 织梦搞笑图片视频模板青岛公司注册
  • 网站右下角调用优酷视频广告代码网站开发的逻辑
  • 音乐网站的音乐怎么做音乐试听有道网站提交入口
  • 定制开发响应式网站哪个公司的app开发
  • 美图秀秀网页版在线使用网站优化设计
  • 网站建设员课程黄村网站开发公司电话
  • html网站开发主要涉及哪些技术互联网精准营销公司
  • 用ps做网站尺寸网站建设 管理规范
  • 学电子商务有出路吗怎么进行seo
  • 郑州快速网站优化公司哪家好陕西省信用建设官方网站
  • 无锡网站推广¥做下拉去118cr什么是网络营销传播
  • 简单网站后台模板wordpress 转 帝国
  • 坪山建设网站中国门户网站
  • 云畅网站建设龙文国土局漳滨村新农村建设网站
  • 崇明建设镇虹桥村网站帮忙建站的公司