JDK类库中的线程池
来源:互联网 发布:js 监听dom变化 编辑:程序博客网 时间:2024/05/29 17:16
Executor接口表示线程池,它的executor(Runnabletask)方法用来执行Runnable类型的任务。Executor的子接口ExecutorService中声明了管理线程池的一些方法,比如用于关闭线程池的shutdown()方法等,Executors类中包含了一些静态方法,它们负责生成各种类型的线程池ExecutorService实例.
例子:简单http服务器(阻塞模式)
package http;import java.io.FileInputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.net.Socket;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.FileChannel;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class SimpleHttpServer {private int port=80;private ServerSocketChannel serverSocketChannel=null;private ExecutorService executorService;private static final int POOL_MULTIPLE=4;private Charset charset=Charset.forName("utf-8");public SimpleHttpServer() throws IOException{executorService =Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_MULTIPLE);serverSocketChannel=ServerSocketChannel.open();serverSocketChannel.socket().setReuseAddress(true);serverSocketChannel.socket().bind(new InetSocketAddress(port));System.out.println("服务器启动");}public void service(){while(true){SocketChannel socketChannel=null;try {socketChannel=serverSocketChannel.accept();executorService.execute(new Handler(socketChannel));} catch (Exception e) {e.printStackTrace();}}}public static void main(String[] args) throws IOException {new SimpleHttpServer().service();}class Handler implements Runnable{private SocketChannel socketChannel;public Handler(SocketChannel socketChannel){this.socketChannel=socketChannel;}public void run(){handle(socketChannel);}public void handle(SocketChannel socketChannel){try {Socket socket=socketChannel.socket();System.out.println("received client's connection come from "+socket.getInetAddress()+":"+socket.getPort());ByteBuffer buffer=ByteBuffer.allocate(2048);//accept http request,assume the request's length less than 2048socketChannel.read(buffer);buffer.flip();String request=decode(buffer);System.out.println(request); //print the http reqeust//construct http responseStringBuffer sb=new StringBuffer("HTTP/1.1 200 OK\r\n");sb.append("Content-Type:text/html\r\n\r\n");socketChannel.write(encode(sb.toString()));FileInputStream in;//get the http request's first lineString firstLineOfRequest=request.substring(0,request.indexOf("\r\n"));if(firstLineOfRequest.indexOf("login.html")!=-1){in=new FileInputStream("D:\\work\\workspace\\myjava\\src\\http\\login.html");}else{in=new FileInputStream("D:\\work\\workspace\\myjava\\src\\http\\hello.html");}FileChannel fileChannel=in.getChannel();fileChannel.transferTo(0, fileChannel.size(), socketChannel);//send response} catch (Exception e) {e.printStackTrace();}finally{try {if(socketChannel!=null){socketChannel.close();}} catch (Exception e2) {e2.printStackTrace();}}}public String decode(ByteBuffer buffer){CharBuffer charBuffer=charset.decode(buffer);return charBuffer.toString();}public ByteBuffer encode(String str){return charset.encode(str);}}}
- JDK类库中的线程池
- JDK中的线程池
- JDK并发包中的线程池(一)
- JDK中的线程池 :工作队列和拒绝策略 上
- ThreadPoolExecutor JDK线程池
- jdk线程池详解
- JDK线程池实践
- JDK并发包中的线程池(二)核心线程池的内部实现
- JDK中的SimpleDateFormat线程非安全
- JDK线程池的使用
- JDK线程池的使用
- JDK线程池的使用
- jdk线程池主要原理
- jdk源码学习:线程池
- jdk线程池-ThreadPoolExecutor机制
- JDK线程池源码分析
- JDK线程池使用小结
- JDK线程池的实现
- 北京大暴雨救人农民工参选三农人物-北京-暴雨-农民工
- MSSQLSERVER数据库- 变量和批处理
- GOOGLE笔试题(10.15电子科大)
- shell while循环监控
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- JDK类库中的线程池
- 成都粮食局长称世界粮食日将体验24小时饥饿-世界粮食日-体验饥饿-国家粮食局
- C语言的谜题
- java生成exe文件
- Android闹钟及相关组件
- Java随机验证码 图片验证码 基于servlet验证码实现
- svn清理工具 RySVNCleaner
- JavaScript全局函数
- vs.net代码段管理器应用