Java多线程(7)--线程池创建线程
经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。
提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁、实现重复利用。
使用线程池好处:
①提高响应速度(减少了创建新线程的时间)
②降低资源消耗(重复利用线程池中线程,不需要每次都创建)
③便于线程管理: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)--线程池创建线程相关推荐
- 请使用线程池创建线程,而勿手动创建线程
在中大型项目中,不可避免地需要执行异步任务,而异步任务的执行则是通过线程而执行的,因此掌握线程是如何创建的则是执行异步任务的第一步. 我们知道,常见的创建线程的方式有: 继承Thread类,重写run ...
- 教你学Java | 带你学习Java多线程(续:创建线程的其他方式与activeCount方法的浅谈)
前言 相信每一位程序猿对"多线程"这个概念应该都不陌生,无论是在开发还是面试的时候,都会遇到多线程的问题.不过,一定有很多小伙伴才刚刚接触到多线程,那么在此就由小弟为各位小伙伴细细 ...
- java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)
1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...
- 多线程之使用线程池创建线程
1.使用线程池的优点 1.减少资源的消耗.重复利用已经创建的线程,避免频繁的创造和销毁线程,减少消耗. 2.提高响应速度.当执行任务时,不需要去创建线程再来执行,只要调动现有的线程来执行即可. 3.提 ...
- threadpoolexecutor创建线程池_线程池ThreadPoolExecutor源码分析
什么是线程池 创建线程要花费昂贵的资源和时间,如果任务来了才创建那么响应时间会变长,而且一个进程能创建的线程数量有限.为了避免这些问题,在程序启动的时候就创建若干线程来响应出来,它们被称为线程池,里面 ...
- java线程池newfi_Java 线程池中的线程复用是如何实现的?
前几天,技术群里有个群友问了一个关于线程池的问题,内容如图所示: 那么就来和大家探讨下这个问题,在线程池中,线程会从 workQueue 中读取任务来执行,最小的执行单位就是 Worker,Worke ...
- 线程池创建与注入,以及线程池参数失效
一.MyThreadPool public class MyThreadPool {/*** 自定义线程名称,方便的出错的时候溯源*/private static ThreadFactory name ...
- 【Android 异步操作】线程池 ( 线程池作用 | 线程池种类 | 线程池工作机制 | 线程池任务调度源码解析 )
文章目录 一.线程池作用 二.线程池种类 三.线程池工作机制 四.线程池任务调度源码解析 一.线程池作用 线程池作用 : ① 避免创建线程 : 避免每次使用线程时 , 都需要 创建线程对象 ; ② 统 ...
- java线程的创建线程_多线程(Thread、线程创建、线程池)
第1章 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序, ...
最新文章
- pgsql怎么从interval中取出数字_tp6中swoole扩展websocket的使用
- 【跃迁之路】【440天】刻意练习系列199(2018.04.21)
- 不同芯片的 Mac 电脑,差距会逐渐拉大吗?
- 学号:201621123032 《Java程序设计》第7周学习总结
- Win7安装MarkdownPad2破解版,报Awesomium.Windows.Controls.WebControl 错误的解决方案
- 微信计数器微信加粉计数器开发
- SQL 语句中 where 条件后 写上 1=1 是什么意思!
- 计算机网络实验 —— 验证性实验
- 伺服使能信号的作用与注意事项
- Linux安装SQuirreL SQL Client
- 算法的最坏情况与最佳情况
- linux下用户和组的管理,linux用户和组管理常见命令
- 进击的局座:悄悄话读后感
- zan php demo,zanphp源码解读 - 环境安装
- 程序编译分为哪几个主要部分
- 微信小程序云开发之微信支付
- 新人怎样学习嵌入式Linux?
- Shell 脚本特殊变量列表
- Android stuio 下载安装教程
- [4G5G专题-88]:功能 - 4G LTE-Advanced关键技术概述
热门文章
- OpenShift Express Web管理控制台:入门
- 为旧版代码创建存根–测试技术6
- Cassandra,MongoDB,CouchDB,Redis,Riak,HBase比较
- php 字符串 中文,php 中文字符串截取乱码
- 在 Linux 下打包命令 tar 和压缩命令 7z 的配合使用示例
- 关于 Mac OS X 内核技术来源
- 计算机考试视频教程江西,江西计算机二级自学教程推荐:公共基础知识(2018年版)...
- 固体加热_干货分享| |固体氧化物燃料电池
- python采用函数编程模式_浅谈Python 函数式编程
- 原来C语言还可以这样实现“泛型编程”!