Java 并发 —— Thread、Executor、线程池
- Java 线程池:
- ThreadPoolExecutor,创建此线程池的方法:
- new
- Executors.newCachedThreadPool():尽量避免使用,其无法控制线程数量,
- ScheduledThreadPoolExecutor:定时执行;
- ThreadPoolExecutor,创建此线程池的方法:
1. Thread
- Thread.yield():静态方法,其实对线程调度器(Java 线程机制的一部分,可将 CPU 从一个线程转移到另一个线程),意在告诉编译器“我已经执行完生命周期中最重要的部分了,此刻正是切换给其他嗷嗷待哺的任务执行一段时间的大好机会”。
将 Runnable 对象提交给 Thread 构造器,使用 Thread 对象来驱动 Runnable 对象的执行;
public class Liftoff implements Runnable{} // 不使用 Thread 的驱动方式
public class MainThread {
public static void main(String[] args) {
Liftoff launch = new Liftoff();
launch.run();
}
} // 使用 Thread 的驱动方式
public class BasicThread {
public static void main(String[] args) {
Threaad t = new Thread(new Liftoff());
t.start();
}
}
2. Executor
java.util.concurrent 包中的 Executor(执行器,Java SE5 以后)用于管理 Thread 对象,以简化并发编程。
Executor 在客户端和任务执行之间提供了一个间接层。
public class CachedThreadPool {
public static void main(Srting[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
for (int i = 0; i < 5; ++i) {
exec.execute(new Liftoff());
}
exec.shutdown();
}
}
3. 线程池:不使用线程池与使用线程池
使用线程池
ThreadPoolExecutor tp = new ThreadPoolExecutor(1, 1, 60, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(COUNT));
for (int i = 0; i < COUNT; ++i)
{
tp.executor(new Runnable(){
@Override
public void run() {
....
}
});
}不使用线程池
for (int i = 0; i < COUNT; ++i)
{
Thread thread = new Thread(){
@Override
public void run(){
...
}
}
thread.start();
}
使用线程池与不使用线程池的显著差异就在于,使用线程池的方式是复用线程的,而不使用线程池则需要每次都创建新的线程,在一个循环中不断地创建对象,显然是一件效率底下的事情。
4. 使用 ThreadPoolExecutor 创建线程池而非 Executors.newCachedThreadPool()
Java 中创建线程池,除了 ThreadPoolExecutor,还有定时的线程池 ScheduledPoolExecutor。需要注意的是对于 Executors.newCachedThreadPool() 方法返回的线程池的使用,该方法返回的线程池是没有线程上限的,使用时需要格外的小心,因为没有方法控制总体的线程数量,而每个线程都是消耗内存的,这可能会导致过多的内存占用。建议不要使用这个方法返回的线程池,而是使用固定线程上限的线程池。
Java 并发 —— Thread、Executor、线程池的更多相关文章
- Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用(转)
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用(转载)
转载自:https://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...
- Java并发编程:线程池的使用(转载)
文章出处:http://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...
- [转]Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- 【转】Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- 13、Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- (转)Java并发编程:线程池的使用
背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...
- Java并发编程之线程池及示例
1.Executor 线程池顶级接口.定义方法,void execute(Runnable).方法是用于处理任务的一个服务方法.调用者提供Runnable 接口的实现,线程池通过线程执行这个 Runn ...
- Java并发编程:线程池ThreadPoolExecutor
多线程的程序的确能发挥多核处理器的性能.虽然与进程相比,线程轻量化了很多,但是其创建和关闭同样需要花费时间.而且线程多了以后,也会抢占内存资源.如果不对线程加以管理的话,是一个非常大的隐患.而线程池的 ...
随机推荐
- 反连接NOT EXISTS子查询中有or 谓词连接条件SQL优化一例
背景 今天在日常数据库检查中,发现一SQL运行时间特别长,于是抓取出来,进行优化. 优化前: 耗时:503s 返回:0 SQL代码 SELECT * FROM MM_PAYABLEMONEY_TD P ...
- Linux中CentOS网络配置以及与Xshell建立远程连接
为centos配置网络 (1)第一步 点开虚拟机的设置,如下图做相关的设置: 网络连接要选择桥接模式,其他的勾选就按照上图的即可,勾选完成点击确定. (2)第二步 点击VMware的编辑选项,找到“虚 ...
- PHP程序员必须知道的两种日志
前言 作为一名程序员,比码代码还重要那么一点点的东西就是日志的分析和查询.下面列出常见日志及设置方法. php-fpm 慢日志 php慢日志需要在php-fpm.conf设置,如果使用源码包安装默认请 ...
- 第二周习题F
Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multiplications: x2 ...
- 【05】emmet系列之各种缩写
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 各种缩写 缩写:! & ...
- POJ-20407Relatives/NYOJ-333mdd的烦恼,欧拉函数简单应用,模板A
poj Relatives Time Limit: 1000MS Memory Li ...
- bzoj 1049 [HAOI2006]数字序列
[bzoj1049][HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不 ...
- Quartz.net框架使用
概述:Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...
- PatentTips - Hierarchical RAID system including multiple RAIDs
BACKGROUND OF THE INVENTION The present invention relates to a storage system offering large capacit ...
- linux 磁盘阵列
1.独立磁盘冗余阵列 (RAID) 2.RAID级别: raid0 扩展卷 (条带卷) 至少一块硬盘 具有较高的存储性能 数据请求多块硬盘并行应答 连续数据分散到多个磁盘存储 ,一块磁盘坏掉所有文件就 ...