- 浏览: 163085 次
- 性别:
- 来自: 西安
-
文章分类
最新评论
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.}
发表评论
-
回调hanshu
2018-10-15 23:09 0java callback -
根据类名查找jar包路径
2018-08-12 01:04 950ProtectionDomain pd = StringUt ... -
https
2018-04-20 23:14 01:导出证书用IE的证书工具可以将网站的证书导出。打开网 ... -
mock request
2017-08-20 02:56 0一:postprotected ApplicationCont ... -
使用mockMvc测试文件上传
2017-08-20 01:52 6398@Autowired BanksController bank ... -
java 线程池实现多并发队列后进先出
2017-02-15 00:33 1889java实现线程池多并发队列后进先出 目前默认的队列都是先 ... -
apache ftp server
2017-01-11 22:41 648apache ftp server -
证书制作工具
2016-06-29 23:28 722证书制作工具 -
spring mvc 初始化加载bean
2016-06-15 20:28 1383<context:component-scan bas ... -
Ribbon 和 Eureka 的集成
2016-06-11 00:42 2889Ribbon 是 Netflix 发布的云中间层服务开源项目 ... -
RestTemplate实践
2016-06-11 00:30 953什么是RestTemplate? RestTemplat ... -
@Component(“”)和@resource(name=””)的使用:
2016-06-08 01:24 12274@Component(“”)和@resource(nam ... -
springboot ant部署
2016-06-08 01:03 1005springboot ant部署 -
springboot 使用外部tomcat启动
2016-06-05 22:59 1568package sample.xml; import o ... -
swagger 实现文件上传
2016-06-01 22:23 5697@ResponseBody @RequestMa ... -
swagger
2016-06-01 21:18 0import static springfox.docum ... -
java
2016-05-26 01:14 0swagger2.0 -
swagger
2016-05-26 00:32 0spring swagger -
java 域名解析
2016-05-18 23:18 490import java.net.InetAddress;im ... -
swing 模拟文件上传
2016-05-15 17:32 546swing 模拟文件上传
相关推荐
Java类库由许多模块组成,包括核心类库、集合框架、I/O流、网络编程、多线程、反射、数据库连接(JDBC)、XML处理等。 1. **核心类库**:这是Java语言的基础,包含`java.lang`、`java.util`、`java.io`等包,提供...
- `Thread`:支持多线程编程。 ##### 6. `java.math.*` - **主要功能**:提供了简明的整数算术以及十进制算术的基本函数。 - **关键类**: - `BigInteger`:用于表示任意精度的整数。 - `BigDecimal`:用于表示...
3. 多线程类库:`java.concurrent`包提供了并发和多线程编程的支持,如线程池、同步工具类和并发容器。 4. GUI(图形用户界面)类库:`javax.swing`和`java.awt`包提供了创建桌面应用的组件和布局管理器,让开发者...
4. 多线程:Java支持多线程编程,Thread类代表程序中的一个执行线程,Runnable接口定义了运行时的行为。此外,ExecutorService和ThreadPoolExecutor等高级工具可以帮助管理线程池,提高并发性能。 5. 反射:Java的...
- 数字如 `51.pdf`、`34.pdf`、`41.pdf`、`44.pdf`、`47.pdf` 可能代表不同的章节编号,分别涵盖了不同主题,如异常处理、多线程、集合操作、网络编程等核心Java概念。 4. **其他关键概念**: - `20.pdf` 和 `24....
- Guava 还包含其他组件,如多线程工具、集合增强、字符串处理等。 Spring Framework 是一个全面的企业级应用开发框架,它包含多个模块,覆盖了从Web开发到数据访问等多个领域: - Spring MVC 是Spring框架的一部分...
4. **多线程**:`java.lang.Thread` 和相关类支持多线程编程,让开发者可以同时执行多个任务。 5. **I/O 流**:`java.io` 包中的流类支持数据的读写,包括字节流、字符流、对象流等,适用于不同数据类型的传输。 6...
在"超级经典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 类库指南,旨在帮助学习者深入理解和运用Java的核心功能。 首先,我们要明白Java类库的重要性。类库是预...
此外,Java类库还包含并发编程相关的`java.util.concurrent`包,其中的线程池、并发容器和同步工具类,如`ExecutorService`、`Semaphore`和`Future`,使得多线程编程更加安全和高效。 在面向对象设计中,`java.lang...
### 从Java类库看设计模式之Observer模式详解 #### 一、引言 在软件开发过程中,常常遇到需要在不同对象之间建立依赖关系的情况,其中一个对象的状态变化会影响到另一个对象的行为。这种需求可以用设计模式中的...
Java API 包含了各种功能,从基本的数据类型操作到复杂的网络通信和多线程处理,无所不包。这个压缩包文件"egs"很可能包含了示例代码或者练习题目,用于帮助理解Java类库的使用。 Java API主要分为几个部分: 1. *...
在Java中,类库分为几个主要部分,包括基础类库、集合框架、I/O流、网络编程、多线程、反射、异常处理、图形用户界面(GUI)以及Java数据库连接(JDBC)等。以下将对这些关键领域进行详细阐述: 1. **基础类库**:...
4. **多线程库**:Thread类和Runnable接口是Java多线程编程的基础,ExecutorService和Future接口则提供了更高级的并发处理机制。 5. **异常处理库**:Java的异常处理机制通过try-catch-finally语句块来捕获和处理...
3. **多线程**:Java.util.concurrent包提供了高级的并发工具,如ExecutorService、Semaphore和CountDownLatch等。源码中可以学习到如何高效地管理和控制并发,理解线程安全的实现方式。 4. **异常处理**:Java....
通过研究这些例子,开发者不仅可以巩固Java基础知识,还能学习到如何在实际项目中灵活运用Java类库,提升编程能力。对于初学者而言,这是一个宝贵的资源库,对于经验丰富的开发者来说,也是一个复习和查找特定功能...
4. **多线程**:Java2类库支持多线程编程,Thread类和Runnable接口是实现多线程的基础。通过继承Thread或实现Runnable,可以创建并运行多个并发执行的任务。 5. **网络编程**:Java提供了Socket和ServerSocket类,...