Executor框架与Thread
Executor将线程的创建和线程的执行解耦,比较下面两个例子:
1:TaskExecutionWebServer.java
package chapter06; import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors; public class TaskExecutionWebServer {
private static final int NTHREADS=100;
private static final Executor exec = Executors.newFixedThreadPool(NTHREADS); public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(100); while (true) {
final Socket connection=serverSocket.accept();
Runnable task=new Runnable() { //Runnable 不处理异常,callable 处理异常。
@Override
public void run() {
//handlerRequest (connection);
}
}; exec.execute(task); //将Runnable 交给executor
}
}
}
2:ThreadPerTaskWebServer ,不可取。
package chapter06; import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; /**
* @program: GradleTestUseSubModule
* @author: Yafei Li
* @create: 2018-07-13 21:05
**/
public class ThreadPerTaskWebServer {
public static void main(String[] args) throws IOException {
ServerSocket socket = new ServerSocket(80);
while (true) {
final Socket connection=socket.accept();
Runnable task=new Runnable() {
@Override
public void run() {
// handleRequest(connection);
}
};
new Thread(task).start();
}
}
}
从上面两个例子可以看出 Executors 会创建线程池,从线程池中取出线程执行任务。可以控制线程的数量。
而Thread要为每个任务创建一个线程,浪费资源。 开销比较高。
所以Executors 能够将创建线程与任务执行解耦, 控制线程数量等优点。
当遇到new Thread(Runnable).start(); 时,应该换为Executor.execute(Runnable);
Executor框架与Thread的更多相关文章
- ThreadPoolExecutor – Java Thread Pool Example(如何使用Executor框架创建一个线程池)
Java thread pool manages the pool of worker threads, it contains a queue that keeps tasks waiting to ...
- java并发编程(十七)Executor框架和线程池
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17465497 Executor框架简介 在Java 5之后,并发编程引入了一堆新的启动 ...
- Executor框架(转载)
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- Java并发和多线程(二)Executor框架
Executor框架 1.Task?Thread? 很多人在学习多线程这部分知识的时候,容易搞混两个概念:任务(task)和线程(thread). 并发编程可以使我们的程序可以划分为多个分离的.独立运 ...
- java并发编程-Executor框架
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- 戏(细)说Executor框架线程池任务执行全过程(上)
一.前言 1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦.要执行任务的人只需把Task描述清楚,然后提交即可.这个Task是怎么被执行的,被谁执行的,什么时候执行的,提交的人就不 ...
- 戏(细)说Executor框架线程池任务执行全过程(下)
上一篇文章中通过引入的一个例子介绍了在Executor框架下,提交一个任务的过程,这个过程就像我们老大的老大要找个老大来执行一个任务那样简单.并通过剖析ExecutorService的一种经典实现Th ...
- Java并发——线程池Executor框架
线程池 无限制的创建线程 若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时: 线程生命周期的开销非常高 资源消耗 稳定性 引入线程池 任务是一组逻辑 ...
- Java Executor 框架学习总结
大多数并发都是通过任务执行的方式来实现的.一般有两种方式执行任务:串行和并行. class SingleThreadWebServer { public static void main(String ...
随机推荐
- ubuntu-15.04-desktop-amd64.iso:ubuntu-15.04-desktop-amd64:安装Oracle11gR2
ubuntu 桌面版的安装不介绍. 如何安装oracle:核心步骤和关键点. ln -sf /bin/bash /bin/sh ln -sf /usr/bin/basename /bin/basena ...
- Google的基础设施安全
Google基础设施在设计时就确保了信息在整个生命周期内都是安全的.这里所说的安全涉及多个层面,包括服务部署.数据存储.进程与进程及外部系统之间的通信,以及运维层面. 物理层 ...
- CSS 解决IE6双倍距离BUG
只要满足下面3个条件才会出现这个BUG: 1)要为块状元素: 2)要左侧浮动: 3)要有左外边距(margin-left): 解决这个BUG很容易,只需要在相应的块状元素的 ...
- js表单计算金额问题
<table width="600" border="1" align="center" style="text-align ...
- 墨卡托投影, GPS 坐标转像素, GPS 坐标转距离
Before: 1. 研究的需要, 在 google map 上爬取了一些的静态卫星地图图片,每张图片的像素为 256*256 2. 通过 photshop 将这些地图碎片手动拼成了地图, 地图只是覆 ...
- php 获取图片base64编码格式数据
$image_file = '1.jpg'; $image_info = getimagesize($image_file); $base64_image_content = "data:{ ...
- YARN的设计
YARN:下一代 Hadoop 计算平台 我们现在稍微改变一下用辞.以下名称的改动有助于更好地了解 YARN 的设计: ResourceManager 代替集群管理器 ApplicationMaste ...
- ZooKeeper(四)-- 第三方客户端 ZkClient的使用
前言 zkClient主要做了两件事情: 一件是在session loss和session expire时自动创建新的ZooKeeper实例进行重连. 另一件是将一次性watcher包装为持久watc ...
- Windows+IIS结合LVS+Keepalived是实现Linux负载均衡软件
在Discuz!NT的最新版本(企业版)中,支持目前主流LINUX平台上的负载均衡解决方案,比如NGINX,HAPROXY,LVS等.本文与其说是解决方案,倒不如说是介绍如何搭建Discuz!NT负载 ...
- Hacking up an armv7s library
NOTE: Please take care with this. I obviously cannot test if this will actually work on a new iPhone ...