经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。

提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁、实现重复利用。

使用线程池好处:
①提高响应速度(减少了创建新线程的时间)
②降低资源消耗(重复利用线程池中线程,不需要每次都创建)
③便于线程管理:corePoolSize:核心池的大小,maximumPoolSize:最大线程数,keepAliveTime:线程没有任务时最多保持多长时间后会终止

示例:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;class NewThread implements Callable {private int sum;@Overridepublic Object call() throws Exception {for (int i = 0; i <= 100; i++) {if (i % 2 == 0){System.out.println(Thread.currentThread().getName() +":" + i);sum += i;}}return sum;}
}class NewThread1 implements Runnable {private int sum;@Overridepublic void run() {for (int i = 0; i <= 100; i++) {if (i % 2 != 0) {System.out.println(Thread.currentThread().getName() + ":" + i);sum += i;}}}
}public class NewThreadTest {public static void main(String[] args) {//提供指定数量的线程池,ExecutorService是接口,Executors是工具类ExecutorService service1 = Executors.newFixedThreadPool(10);//管理:需要先将service1强转为ThreadPoolExecutor类对象,//ThreadPoolExecutor是ExecutorService接口的实现类ThreadPoolExecutor service = (ThreadPoolExecutor)service1;//service.方法去管理线程池//执行,需要提供接口实现类对象service.submit(new NewThread()); //适用Callableservice.execute(new NewThread1());  //使用Runnable//关闭连接service.shutdown();}
}

Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池

Executors.newCachedThreadPool():创建一个可根据需要创建新线程的线程池
Executors.newFixedThreadPool(n); 创建一个可重用固定线程数的线程池
Executors.newSingleThreadExecutor() :创建一个只有一个线程的线程池
Executors.newScheduledThreadPool(n):创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行

Java多线程(7)--线程池创建线程相关推荐

  1. 请使用线程池创建线程,而勿手动创建线程

    在中大型项目中,不可避免地需要执行异步任务,而异步任务的执行则是通过线程而执行的,因此掌握线程是如何创建的则是执行异步任务的第一步. 我们知道,常见的创建线程的方式有: 继承Thread类,重写run ...

  2. 教你学Java | 带你学习Java多线程(续:创建线程的其他方式与activeCount方法的浅谈)

    前言 相信每一位程序猿对"多线程"这个概念应该都不陌生,无论是在开发还是面试的时候,都会遇到多线程的问题.不过,一定有很多小伙伴才刚刚接触到多线程,那么在此就由小弟为各位小伙伴细细 ...

  3. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

  4. 多线程之使用线程池创建线程

    1.使用线程池的优点 1.减少资源的消耗.重复利用已经创建的线程,避免频繁的创造和销毁线程,减少消耗. 2.提高响应速度.当执行任务时,不需要去创建线程再来执行,只要调动现有的线程来执行即可. 3.提 ...

  5. threadpoolexecutor创建线程池_线程池ThreadPoolExecutor源码分析

    什么是线程池 创建线程要花费昂贵的资源和时间,如果任务来了才创建那么响应时间会变长,而且一个进程能创建的线程数量有限.为了避免这些问题,在程序启动的时候就创建若干线程来响应出来,它们被称为线程池,里面 ...

  6. java线程池newfi_Java 线程池中的线程复用是如何实现的?

    前几天,技术群里有个群友问了一个关于线程池的问题,内容如图所示: 那么就来和大家探讨下这个问题,在线程池中,线程会从 workQueue 中读取任务来执行,最小的执行单位就是 Worker,Worke ...

  7. 线程池创建与注入,以及线程池参数失效

    一.MyThreadPool public class MyThreadPool {/*** 自定义线程名称,方便的出错的时候溯源*/private static ThreadFactory name ...

  8. 【Android 异步操作】线程池 ( 线程池作用 | 线程池种类 | 线程池工作机制 | 线程池任务调度源码解析 )

    文章目录 一.线程池作用 二.线程池种类 三.线程池工作机制 四.线程池任务调度源码解析 一.线程池作用 线程池作用 : ① 避免创建线程 : 避免每次使用线程时 , 都需要 创建线程对象 ; ② 统 ...

  9. java线程的创建线程_多线程(Thread、线程创建、线程池)

    第1章 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序, ...

最新文章

  1. pgsql怎么从interval中取出数字_tp6中swoole扩展websocket的使用
  2. 【跃迁之路】【440天】刻意练习系列199(2018.04.21)
  3. 不同芯片的 Mac 电脑,差距会逐渐拉大吗?
  4. 学号:201621123032 《Java程序设计》第7周学习总结
  5. Win7安装MarkdownPad2破解版,报Awesomium.Windows.Controls.WebControl 错误的解决方案
  6. 微信计数器微信加粉计数器开发
  7. SQL 语句中 where 条件后 写上 1=1 是什么意思!
  8. 计算机网络实验 —— 验证性实验
  9. 伺服使能信号的作用与注意事项
  10. Linux安装SQuirreL SQL Client
  11. 算法的最坏情况与最佳情况
  12. linux下用户和组的管理,linux用户和组管理常见命令
  13. 进击的局座:悄悄话读后感
  14. zan php demo,zanphp源码解读 - 环境安装
  15. 程序编译分为哪几个主要部分
  16. 微信小程序云开发之微信支付
  17. 新人怎样学习嵌入式Linux?
  18. Shell 脚本特殊变量列表
  19. Android stuio 下载安装教程
  20. [4G5G专题-88]:功能 - 4G LTE-Advanced关键技术概述

热门文章

  1. OpenShift Express Web管理控制台:入门
  2. 为旧版代码创建存根–测试技术6
  3. Cassandra,MongoDB,CouchDB,Redis,Riak,HBase比较
  4. php 字符串 中文,php 中文字符串截取乱码
  5. 在 Linux 下打包命令 tar 和压缩命令 7z 的配合使用示例
  6. 关于 Mac OS X 内核技术来源
  7. 计算机考试视频教程江西,江西计算机二级自学教程推荐:公共基础知识(2018年版)...
  8. 固体加热_干货分享| |固体氧化物燃料电池
  9. python采用函数编程模式_浅谈Python 函数式编程
  10. 原来C语言还可以这样实现“泛型编程”!