单线程 与 多线程 的执行
来源:互联网 发布:中英互译软件 编辑:程序博客网 时间:2024/05/01 23:26
public class SingleThreadWebServer {public static void main(String args) throws IOException {ServerSocket socket = new ServerSocket(80);while (true) {Socket connection = socket.accept();handleRequest(connection);}}private static void handleRequest(Socket connection) {System.out.println("do something");}}
public class MultipleThreadWebServer {public static void main(String args[]) throws IOException {ServerSocket socket = new ServerSocket(80);while (true) {final Socket connection = socket.accept();Runnable runable = new Runnable() {public void run() {handleRequest(connection);}};new Thread(runable).start();}}private static void handleRequest(Socket connection) {System.out.println("do something");}}
SingleThreadWebServer很简单,且在理论上是正确的,但在实际生产环境中的执行性能却很槽糕,
因为它每次只能同时处理一个请求。主线程在接受连接域处理相关请求等操作之间不断地交替运行。当服
务器正在处理请求时,新到来的连接不许等待知道请求处理完成,然后服务器将再次调用accept。
MultipleThreadWebServer在结构上类似域前面的单线程版本-主线程仍然不断地交替执行“接受外部链接”
与”分发请求“ 等操作。区别于,对于每个连接,主线程都将创建一个新的线程来处理请求,而不是在祝循环
中进行处理。
基于Executor来构建web服务器是非常容易的。在程序中用Executor代替了硬编码的线程创建过程。在
这种情况下使用了一种标准的Executor实现,即一个固定长度的线程池,可以容纳100个线程。
public class TaskExcecutionWebServer {private static final int NTHREADS= 100;private static final Executor exe = Executors.newFixedThreadPool(NTHREADS);public static void main(String args[]) throws IOException{ServerSocket socket =new ServerSocket(80);while(true){final Socket connection = socket.accept();Runnable task =new Runnable() {public void run() { handleRequest(connection);}};exe.equals(task);}}}在TaskExecutionWebServer中,通过使用Executor,将请求处理任务的提交域实际记性解耦开来,并且只需采用另一种
不同的Executor实现,就可以改变服务器的行为。改变Executor实现或配置所带来的影响要远远小于改变任务提交方式带来
的影响。通常,Executor的配置是一次性的,因此在不熟阶段可以完成,而提交任务的代码会不断地扩散到整个程序中,
增加了修改的难度。
public static ThreadPerTaskExecutor implements Executor { public void execute(Runnable r){ new Thread(r).start();}}
- 单线程 与 多线程 的执行
- 多线程-单线程执行程序
- 关于Maptask任务单线程与多线程执行器解读
- 单线程与多线程
- 单线程与多线程
- 多线程与单线程
- 多线程与单线程的区别
- 单线程与多线程的比较
- 单线程与多线程的区别
- 单线程与多线程的区别
- 多线程和单线程的执行效率问题
- ThreadPoolTaskExecutor 多线程分解执行耗时任务与单线程串行执行简单比较
- ThreadPoolTaskExecutor 多线程分解执行耗时任务与单线程串行执行简单比较
- 多线程和单线程执行效率比较
- 多线程与单线程区别
- Cpp--单线程与多线程
- 线程-单例与多线程
- SurfaceView 单线程与多线程画图的比较例子
- CollabNet Teamforge 父项目与子项目
- 厚积薄发,丰富的公用类库积累
- 两款主流摄像头OV7620与OV7670 By Demok
- android深入JNI遇到的问题?
- ORACLE 抓取AWR报告
- 单线程 与 多线程 的执行
- ORACLE 测试数据文件丢失 与 恢复
- Lucene 优化
- JAVASE基础部分一------java语言、JRE、JDK、环境变量、Hello world
- C++构造函数
- 女生每月生理期,是升级防火墙吗?
- HTTP状态码大全
- WebService
- C#.net中的const