`

java类库中的多线程

    博客分类:
  • java
 
阅读更多

JDK类库中的线程池
.
分类: J2EE2012-10-16 12:44162人阅读评论(0)收藏举报

jdkexceptionhttp服务器bufferstringsocket





Executor接口表示线程池,它的executor(Runnabletask)方法用来执行Runnable类型的任务。Executor的子接口ExecutorService中声明了管理线程池的一些方法,比如用于关闭线程池的shutdown()方法等,Executors类中包含了一些静态方法,它们负责生成各种类型的线程池ExecutorService实例.



例子:简单http服务器(阻塞模式)





[java] view plaincopyprint?
01.package http; 
02. 
03.import java.io.FileInputStream; 
04.import java.io.IOException; 
05.import java.net.InetSocketAddress; 
06.import java.net.Socket; 
07.import java.nio.ByteBuffer; 
08.import java.nio.CharBuffer; 
09.import java.nio.channels.FileChannel; 
10.import java.nio.channels.ServerSocketChannel; 
11.import java.nio.channels.SocketChannel; 
12.import java.nio.charset.Charset; 
13.import java.util.concurrent.ExecutorService; 
14.import java.util.concurrent.Executors; 
15. 
16.public class SimpleHttpServer { 
17.    private int port=80; 
18.    private ServerSocketChannel serverSocketChannel=null; 
19.    private ExecutorService executorService; 
20.    private static final int POOL_MULTIPLE=4; 
21.    private Charset charset=Charset.forName("utf-8"); 
22.    public SimpleHttpServer() throws IOException{ 
23.        executorService =Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_MULTIPLE); 
24.        serverSocketChannel=ServerSocketChannel.open(); 
25.        serverSocketChannel.socket().setReuseAddress(true); 
26.        serverSocketChannel.socket().bind(new InetSocketAddress(port)); 
27.        System.out.println("服务器启动"); 
28.    } 
29.    public void service(){ 
30.        while(true){ 
31.            SocketChannel socketChannel=null; 
32.            try { 
33.                socketChannel=serverSocketChannel.accept(); 
34.                executorService.execute(new Handler(socketChannel)); 
35.            } catch (Exception e) { 
36.                e.printStackTrace(); 
37.            } 
38.        } 
39.    } 
40.    public static void main(String[] args) throws IOException { 
41.        new SimpleHttpServer().service(); 
42.    } 
43.    class Handler implements Runnable{ 
44.        private SocketChannel socketChannel; 
45.        public Handler(SocketChannel socketChannel){ 
46.            this.socketChannel=socketChannel; 
47.        } 
48.        public void run(){ 
49.            handle(socketChannel); 
50.        } 
51.        public void handle(SocketChannel socketChannel){ 
52.            try { 
53.                Socket socket=socketChannel.socket(); 
54.                System.out.println("received client's connection come from "+socket.getInetAddress()+":"+socket.getPort()); 
55.                ByteBuffer buffer=ByteBuffer.allocate(2048);//accept http request,assume the request's length less than 2048 
56.                socketChannel.read(buffer); 
57.                buffer.flip(); 
58.                String request=decode(buffer); 
59.                System.out.println(request); //print the http reqeust 
60.                //construct http response 
61.                StringBuffer sb=new StringBuffer("HTTP/1.1 200 OK\r\n"); 
62.                sb.append("Content-Type:text/html\r\n\r\n"); 
63.                socketChannel.write(encode(sb.toString())); 
64.                 
65.                FileInputStream in; 
66.                //get the http request's first line 
67.                String firstLineOfRequest=request.substring(0,request.indexOf("\r\n")); 
68.                if(firstLineOfRequest.indexOf("login.html")!=-1){ 
69.                    in=new FileInputStream("D:\\work\\workspace\\myjava\\src\\http\\login.html");                    
70.                }else{ 
71.                    in=new FileInputStream("D:\\work\\workspace\\myjava\\src\\http\\hello.html"); 
72.                } 
73.                FileChannel fileChannel=in.getChannel(); 
74.                fileChannel.transferTo(0, fileChannel.size(), socketChannel);//send response 
75.            } catch (Exception e) { 
76.                e.printStackTrace(); 
77.            }finally{ 
78.                try { 
79.                    if(socketChannel!=null){ 
80.                        socketChannel.close(); 
81.                    } 
82.                } catch (Exception e2) { 
83.                    e2.printStackTrace(); 
84.                } 
85.            } 
86.        } 
87.        public String decode(ByteBuffer buffer){ 
88.            CharBuffer charBuffer=charset.decode(buffer); 
89.            return charBuffer.toString(); 
90.        } 
91.        public ByteBuffer encode(String str){ 
92.            return charset.encode(str); 
93.        } 
94.    } 
95.} 






分享到:
评论

相关推荐

    Java类库中文手册

    Java类库由许多模块组成,包括核心类库、集合框架、I/O流、网络编程、多线程、反射、数据库连接(JDBC)、XML处理等。 1. **核心类库**:这是Java语言的基础,包含`java.lang`、`java.util`、`java.io`等包,提供...

    Java类库 java中常用的类 可以参考

    - `Thread`:支持多线程编程。 ##### 6. `java.math.*` - **主要功能**:提供了简明的整数算术以及十进制算术的基本函数。 - **关键类**: - `BigInteger`:用于表示任意精度的整数。 - `BigDecimal`:用于表示...

    Java类库下载Q

    3. 多线程类库:`java.concurrent`包提供了并发和多线程编程的支持,如线程池、同步工具类和并发容器。 4. GUI(图形用户界面)类库:`javax.swing`和`java.awt`包提供了创建桌面应用的组件和布局管理器,让开发者...

    java类库详解(PDF版)

    4. 多线程:Java支持多线程编程,Thread类代表程序中的一个执行线程,Runnable接口定义了运行时的行为。此外,ExecutorService和ThreadPoolExecutor等高级工具可以帮助管理线程池,提高并发性能。 5. 反射:Java的...

    java类库详解PDF格式的

    - 数字如 `51.pdf`、`34.pdf`、`41.pdf`、`44.pdf`、`47.pdf` 可能代表不同的章节编号,分别涵盖了不同主题,如异常处理、多线程、集合操作、网络编程等核心Java概念。 4. **其他关键概念**: - `20.pdf` 和 `24....

    Java类库大全.docx

    - Guava 还包含其他组件,如多线程工具、集合增强、字符串处理等。 Spring Framework 是一个全面的企业级应用开发框架,它包含多个模块,覆盖了从Web开发到数据访问等多个领域: - Spring MVC 是Spring框架的一部分...

    java2类库 java类库的源文件

    4. **多线程**:`java.lang.Thread` 和相关类支持多线程编程,让开发者可以同时执行多个任务。 5. **I/O 流**:`java.io` 包中的流类支持数据的读写,包括字节流、字符流、对象流等,适用于不同数据类型的传输。 6...

    经典java例子,涉及到大部分java类库的使用.rar

    在"超级经典java例子,涉及到大部分java类库的使用"这个压缩包中,你将有机会看到这些类库的实际应用,从而加深对Java编程的理解。通过阅读和运行这些示例,你可以更熟练地掌握Java类库,提升你的编程技能。记住,...

    Java类库大全

    Java类库大全是一个集合了众多Java开发中常用和实用类库的资源集合,旨在为开发者提供便利,提高开发效率。这个资源包包含了丰富的Java库,覆盖了从基础数据类型操作到复杂的网络通信、多线程处理、数据库操作、图形...

    java类库 java包

    8. `java.concurrent`: 并发包,提供线程和同步工具,如ExecutorService、Future、Semaphore和CyclicBarrier,帮助开发者实现多线程和并发编程。 9. `java.time`: Java 8引入的新时间日期API,替代了旧的`java.util...

    JAVA_ClassLib.rar_classlib ja_java 类库_java核心_java类库手册

    `JAVA_ClassLib.rar_classlib ja_java 类库_java核心_java类库手册` 这个压缩包文件包含了一份详细的 Java 类库指南,旨在帮助学习者深入理解和运用Java的核心功能。 首先,我们要明白Java类库的重要性。类库是预...

    Java类库手册

    此外,Java类库还包含并发编程相关的`java.util.concurrent`包,其中的线程池、并发容器和同步工具类,如`ExecutorService`、`Semaphore`和`Future`,使得多线程编程更加安全和高效。 在面向对象设计中,`java.lang...

    从Java类库看设计模式

    ### 从Java类库看设计模式之Observer模式详解 #### 一、引言 在软件开发过程中,常常遇到需要在不同对象之间建立依赖关系的情况,其中一个对象的状态变化会影响到另一个对象的行为。这种需求可以用设计模式中的...

    java类库

    Java API 包含了各种功能,从基本的数据类型操作到复杂的网络通信和多线程处理,无所不包。这个压缩包文件"egs"很可能包含了示例代码或者练习题目,用于帮助理解Java类库的使用。 Java API主要分为几个部分: 1. *...

    java类库参考手册

    在Java中,类库分为几个主要部分,包括基础类库、集合框架、I/O流、网络编程、多线程、反射、异常处理、图形用户界面(GUI)以及Java数据库连接(JDBC)等。以下将对这些关键领域进行详细阐述: 1. **基础类库**:...

    JAVA2 SDK 类库.rar_java 类库

    4. **多线程库**:Thread类和Runnable接口是Java多线程编程的基础,ExecutorService和Future接口则提供了更高级的并发处理机制。 5. **异常处理库**:Java的异常处理机制通过try-catch-finally语句块来捕获和处理...

    java常用类库源码

    3. **多线程**:Java.util.concurrent包提供了高级的并发工具,如ExecutorService、Semaphore和CountDownLatch等。源码中可以学习到如何高效地管理和控制并发,理解线程安全的实现方式。 4. **异常处理**:Java....

    超级经典java例子,涉及到大部分java类库的使用

    通过研究这些例子,开发者不仅可以巩固Java基础知识,还能学习到如何在实际项目中灵活运用Java类库,提升编程能力。对于初学者而言,这是一个宝贵的资源库,对于经验丰富的开发者来说,也是一个复习和查找特定功能...

    Java2 类库 Java2 类库

    4. **多线程**:Java2类库支持多线程编程,Thread类和Runnable接口是实现多线程的基础。通过继承Thread或实现Runnable,可以创建并运行多个并发执行的任务。 5. **网络编程**:Java提供了Socket和ServerSocket类,...

Global site tag (gtag.js) - Google Analytics