`
young-2017
  • 浏览: 9491 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

使用线程池改进Bio

阅读更多
Server端:
package com.huayang.fakeasyncio;

import com.huayang.Bio.ServerHandler;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(10001);
            System.out.println("server start in port 10001");
            Socket socket = null;
            ServerThreadExcutorPool singleExcutor = new ServerThreadExcutorPool(50, 1000);
            while (true) {
                socket = serverSocket.accept();
                singleExcutor.execute(new ServerHandler(socket));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != serverSocket) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


线程池:
package com.huayang.fakeasyncio;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ServerThreadExcutorPool {
    private ExecutorService executorService;

    public ServerThreadExcutorPool(int maxPoolSize, int queneSize) {
        executorService = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),
                maxPoolSize, 120L, TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(queneSize));
    }
    public void execute(java.lang.Runnable task) {
        executorService.execute(task);
    }
}


client端以及task沿用上一篇
改进点:
由于线程池和消息队列都是有界的,无论客户端并发连接数有多大,都不会导致线程数过多或者线程栈溢出
分享到:
评论

相关推荐

    浅谈Java中BIO、NIO和AIO的区别和应用场景

    NIO相比BIO有很大的改进,但是它仍然是一个同步IO模型。 AIO(Asynchronous I/O) AIO是JDK1.7中引入的真正意义上的异步非阻塞IO模型,服务器的实现模式为多个有效请求一个线程,客户端的IO请求都是由OS先完成再...

    Java程序性能优化之二十三个建议

    8. **理解并正确使用线程池**:通过ThreadPoolExecutor定制线程池大小,避免创建过多线程导致资源浪费。 9. **优化IO操作**:使用NIO(非阻塞I/O)代替传统的BIO,提高处理大量并发连接的能力。 10. **理解内存...

    HttpNioService

    NIO(New Input/Output)在Java 1.4引入,是对传统阻塞I/O(BIO)模型的一种改进。NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道是数据传输的途径,缓冲区用于存储数据,而选择器...

    Java性能优化技巧集锦

    6. **并发编程**:理解synchronized、volatile和Atomic类的用法,合理使用线程池(ExecutorService)以减少线程创建的开销。掌握锁的优化策略,如读写锁(ReentrantReadWriteLock)。 7. **避免冗余计算**:对计算...

    Netty面试专题.pdf

    - 伪异步IO是对BIO的一种改进,它使用线程池来减少线程的开销,但是仍然存在线程资源紧张的问题。 - NIO(New IO)是Java在1.4版本引入的新的IO模型。NIO采用面向缓冲区(Buffer)和通道(Channel)的概念,支持面向...

    TOMCAT优化

    默认的Bio(阻塞I/O)连接器效率较低,推荐使用Nio或Apr(Apache Portable Runtime)连接器。Nio连接器支持非阻塞I/O,能处理大量并发连接。在`server.xml`中配置NioConnector,例如: ```xml connectionTimeout=...

    tomcat 6.0

    1. **Servlet 2.5支持**: Tomcat 6.0支持Servlet 2.5规范,带来了许多新功能和改进,如注解支持、过滤器链的改进等。 2. **JSP 2.1支持**: 提供了对JSP 2.1规范的支持,包括EL(Expression Language)增强和自定义...

    tomcat7最新版本

    Tomcat是一款广泛使用的开源Java Servlet容器,它实现了Java EE的Servlet和JavaServer Pages (JSP) 规范,用于部署和运行Java web应用程序。 【描述】"使用64位Win系统"意味着此版本的Tomcat是为64位Windows操作...

    tomcat 7.0.21

    - 使用NIO连接器代替BIO,以处理大量并发连接。 - 配置JVM内存参数,如`-Xms`和`-Xmx`,根据服务器资源进行合理设定。 - 开启JVM的垃圾回收优化,如使用G1垃圾收集器。 - 使用缓存机制,如Ehcache,减轻数据库...

    tomcat 1.6

    4. **NIO(非阻塞I/O)模式**:除了传统的BIO模式,Tomcat 6开始支持NIO,这为处理大量并发连接提供了更高的效率。 5. **更好的安全特性**:6.0.18版本包含了一些安全修复,提升了服务器的安全性,包括防止跨站请求...

    Apache Tomcat V6.0.rar

    - Tomcat 6.0在性能方面有所提升,例如通过改进线程池管理和连接器优化,使得Web应用程序处理请求的能力增强。 3. **更好的管理工具**: - 提供了更完善的管理工具,如`Manager App`和`Host Manager`,它们允许...

    Tomcat源码解析.pdf

    - **`executor="TomcatThreadPool"`**:指定使用名为`TomcatThreadPool`的线程池来处理请求。 - **`maxThreads`**:线程池的最大线程数,默认为150。 - **`minSpareThreads`**:线程池中保持的最小线程数,默认为100...

    apache-tomcat-8.0.47.rar

    例如,`Connector`元素在`server.xml`中的配置可以决定服务器如何处理HTTP连接,包括使用NIO(非阻塞I/O)还是BIO(阻塞I/O)模式。 总结来说,Apache Tomcat 8.0.47是Java开发者的重要工具,用于部署和运行Java ...

    TDA-visualVM插件及性能优化方法.zip

    4. **I/O操作优化**:减少不必要的I/O操作,利用缓冲技术提高读写效率,使用NIO(非阻塞I/O)替代传统的BIO。 5. **代码优化**:遵循编程最佳实践,如避免过度使用全局变量,减少循环内的计算,以及使用适当的算法...

    apachetomcat6·0·16

    此外,还可以通过监控Tomcat的运行状态,如查看线程池、内存使用情况等,来诊断性能问题。 10. **版本更新与兼容性**:尽管Apache Tomcat 6.0.16已经相对较旧,但它仍能与一些旧版本的Java虚拟机(JVM)兼容。然而...

    tomcat服务器

    2. **NIO.2和APR支持**:除了传统的BIO(阻塞I/O)模型,Tomcat 8引入了对Java NIO.2 API的支持,以及通过Apache Portable Runtime (APR)库的使用,提高了并发处理能力和系统资源利用效率。 3. **改进的WebSocket...

    Tomcat-8.5.65.rar

    1. **线程池配置**:通过调整`conf/server.xml`中的`Executor`元素,可以定制线程池大小,优化并发性能。 2. **JVM调优**:根据应用需求,通过调整JVM参数(如堆内存大小、垃圾收集器类型等)来提升性能。 3. **...

Global site tag (gtag.js) - Google Analytics