概述
java.util.concurrent 包里有一个Executor 框架
- 基于接口的任务执行工具
- 只需要一行代码
- 提交一个runnable 方法
- 优雅的终止(必须做到,不然虚拟机可能不会退出)
对于负载不重的服务
- Executors.newCachedThreadPool 就能满足
- 不太适合大负载
- 因为被提交的任务没有排队,而是直接交给线程执行,没有空闲就会new 新的线程
大负载服务器
- Executors.newFixedThreadPool
- 包含固定数量线程
- 最大限度的控制,直接使用ThreadPoolExecutor
请尽量不要使用自己的工作队列、也尽量不要直接使用线程
- Thread 是执行机制、又是工作单元(任务:task)
- 现在二者分开,task由Runnable、Callable来充当
- 执行机制executor service
本质上讲,executor 框架所做的工作是执行,就像Collection 框架做的是 聚集
以上转自:https://my.oschina.net/u/3847203/blog/2987610
以下是自己的代码:
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
new Main().f1();
new Main().f2();
new Main().f3();
}
public void f1() {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("new Thread");
}
}).start();
}
public void f2() {
ExecutorService executors = Executors.newFixedThreadPool(1);
executors.execute(new Runnable() {
@Override
public void run() {
System.out.println("executors");
}
});
executors.shutdown();
}
public void f3() {
ExecutorService executors = Executors.newFixedThreadPool(1);
Future<String> future = executors.submit(new Callable<String>() {
@Override
public String call() {
return "executors.submit";
}
});
try {
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
executors.shutdown();
}
}
//executors
//new Thread
//executors.submit
最后
以上就是柔弱绿草为你收集整理的《effective java》68:executor和task优先于线程的全部内容,希望文章能够帮你解决《effective java》68:executor和task优先于线程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复