本文主要是介绍《effective java》68:executor和task优先于线程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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() {@Overridepublic void run() {System.out.println("new Thread");}}).start();}public void f2() {ExecutorService executors = Executors.newFixedThreadPool(1);executors.execute(new Runnable() {@Overridepublic void run() {System.out.println("executors");}});executors.shutdown();}public void f3() {ExecutorService executors = Executors.newFixedThreadPool(1);Future<String> future = executors.submit(new Callable<String>() {@Overridepublic 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优先于线程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!