Java 并发 —— Thread、Executor、线程池
来源:互联网 发布:第三方微信软件 编辑:程序博客网 时间:2024/06/05 11:48
- 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() 方法返回的线程池的使用,该方法返回的线程池是没有线程上限的,使用时需要格外的小心,因为没有方法控制总体的线程数量,而每个线程都是消耗内存的,这可能会导致过多的内存占用。建议不要使用这个方法返回的线程池,而是使用固定线程上限的线程池。
阅读全文
0 0
- Java 并发 —— Thread、Executor、线程池
- 【Java并发编程】并发新特性—Executor框架与线程池(含代码)
- 【Java并发编程】:并发新特性—Executor框架与线程池(含代码)
- java并发编程(十九)--并发新特性—Executor框架与线程池
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池
- Java并发编程——Executor接口及线程池的使用
- Java并发编程——Executor接口及线程池的使用
- JAVA Executor实现并发线程
- JAVA Executor实现并发线程
- 并发新特性—Executor框架与线程池
- 并发新特性—Executor 框架与线程池
- 并发新特性—Executor框架与线程池
- Java并发---- Executor并发框架--线程池,ThreadToolExecutor初步理解
- Java并发---- Executor并发框架--线程池,ThreadToolExecutor初步理解
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)
- 【Java并发编程】之十九:并发新特性—Executor框架与线程池(含代码)(r)
- 多态
- 阿里巴巴(区间dp)
- 设计模式C++实现(1)——工厂模式
- PAT 1059 C语言竞赛
- 怎么安装Java的编译器?
- Java 并发 —— Thread、Executor、线程池
- 最长公共子序列(DP)
- HashMap之entrySet( )底层实现原理分析
- 执行mavenclean,install,生成项目jar文件
- java鬼混笔记:Hibernate:3、一对一关系之外键单向和双向关联
- 需要深入学习的开源项目
- C++学习笔记——正则表达式
- 使用BootStrap Inputfile 遇到的问题
- poj