《Java TCP/IP Socket编程》读书笔记(13)
2013-01-30 23:18
375 查看
4.1.5 系统管理调度——Executor接口
Executor接口(java.util.concurrent包的一部分)就代表了一个根据某种策略来执行Runnable实例的对象,其中可能包括了排队和调度的细节,或如何选择要执行的任务。Executor接口只定义了一个方法:interface Executor { void execute(Runnable task); }
Java提供了大量的内置Executor接口实现,它们都可以简单方便地使用,也可以进行扩展性的配置。其中一些还提供了处理维护线程等繁琐细节的功能。例如,如果一个线程因为未捕获的异常或其他故障停止,它们就自动创建一个新的线程来替换原来的线程。
ExecutorService接口继承于Executor接口,并提供了一个更高级的工具来关闭服务器,包括正常的关闭和突然的关闭。ExecutorService还允许在完成任务后返回一个结果,这需要用到Callable接口,它和Runnable接口很像,只是多了一个返回值。
我们可以通过调用Executors类的各种静态工厂方法来获取ExecutorService实例。示例程序TCPEchoServerExecutor.java演示了基本Executor工具的使用方法。
下面是详细代码
package com.suifeng.tcpip.chapter4; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.logging.Logger; /** * 采用JDK自带线程池的方式 * @author Suifeng * */ public class TCPEchoServerExecutors { public static void main(String[] args) throws IOException { if(args.length != 1) { throw new IllegalArgumentException("Parameter:<Port>"); } // 服务器监听端口 int serverPort = Integer.parseInt(args[0]); ServerSocket serverSocket = new ServerSocket(serverPort); /* * 在使用一个实现了Runnable接口的实例调用它的execute()方法时, * 如果必要它将创建一个新的线程来处理任务。 * 然而,它首先会尝试使用已有的线程。 * 如果一个线程空闲了60秒以上,则将移出线程池。 * */ Executor service = Executors.newCachedThreadPool(); Logger logger = Logger.getLogger("practical"); logger.info("Server is started!!!!"); while(true) { Socket socket = serverSocket.accept(); service.execute(new EchoProtocol(socket,logger)); } } }
启动服务器端,监听39393端口
启动客户端
查看服务器端
再次启动客户端
再次查看服务器端
本次结果可以看出,两次使用的是同一个线程进行处理。
相关文章推荐
- microsoft mobile 移动应用开发宝典----读书笔记(13)
- C语言深度解剖(精讲版)——读书笔记13 &&自己的一些理解
- 读书笔记——Windows核心编程(13)Windows内存体系结构
- 读书笔记--SQL必知必会13--创建高级联结
- 读书笔记——Windows核心编程(13)Windows内存体系结构
- C#2008与.NET 3.5 高级程序设计读书笔记(13)-- C#3.0的语言功能
- 读书笔记之:鸟哥的Linux私房菜——基础学习篇(第三版) (13-17章)
- effective C++ 13_以对象管理资源 读书笔记
- 《Effective C#》读书笔记——条目13:正确地初始化静态成员变量<.NET资源管理>
- 《编程之美》读书笔记13: 4.1 金刚坐飞机问题
- 分布式系统的一致性算法------《Designing Data-Intensive Applications》读书笔记13
- Expert One-on-One Oracle Chapter 13 物化视图 读书笔记(2)
- 读书笔记--101个shell脚本 之#13--猜数字
- 《设计模式之禅》读书笔记--(13)策略模式
- MIT 线性代数(13—15)读书笔记
- effective C++ 读书笔记 条款12与条款13
- 读书笔记:C++ Primer系列(13)—— break、continue、goto语句
- 《C++捷径教程》读书笔记--Chapter 13--运算符的重载(完结)
- 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(13)--- 线程安全接口和双检查加锁优化
- 【读书笔记《Android游戏编程之从零开始》】13.游戏开发基础(Paint 画笔)