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沿用上一篇
改进点:
由于线程池和消息队列都是有界的,无论客户端并发连接数有多大,都不会导致线程数过多或者线程栈溢出
分享到:
相关推荐
NIO相比BIO有很大的改进,但是它仍然是一个同步IO模型。 AIO(Asynchronous I/O) AIO是JDK1.7中引入的真正意义上的异步非阻塞IO模型,服务器的实现模式为多个有效请求一个线程,客户端的IO请求都是由OS先完成再...
8. **理解并正确使用线程池**:通过ThreadPoolExecutor定制线程池大小,避免创建过多线程导致资源浪费。 9. **优化IO操作**:使用NIO(非阻塞I/O)代替传统的BIO,提高处理大量并发连接的能力。 10. **理解内存...
NIO(New Input/Output)在Java 1.4引入,是对传统阻塞I/O(BIO)模型的一种改进。NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道是数据传输的途径,缓冲区用于存储数据,而选择器...
6. **并发编程**:理解synchronized、volatile和Atomic类的用法,合理使用线程池(ExecutorService)以减少线程创建的开销。掌握锁的优化策略,如读写锁(ReentrantReadWriteLock)。 7. **避免冗余计算**:对计算...
- 伪异步IO是对BIO的一种改进,它使用线程池来减少线程的开销,但是仍然存在线程资源紧张的问题。 - NIO(New IO)是Java在1.4版本引入的新的IO模型。NIO采用面向缓冲区(Buffer)和通道(Channel)的概念,支持面向...
默认的Bio(阻塞I/O)连接器效率较低,推荐使用Nio或Apr(Apache Portable Runtime)连接器。Nio连接器支持非阻塞I/O,能处理大量并发连接。在`server.xml`中配置NioConnector,例如: ```xml connectionTimeout=...
1. **Servlet 2.5支持**: Tomcat 6.0支持Servlet 2.5规范,带来了许多新功能和改进,如注解支持、过滤器链的改进等。 2. **JSP 2.1支持**: 提供了对JSP 2.1规范的支持,包括EL(Expression Language)增强和自定义...
Tomcat是一款广泛使用的开源Java Servlet容器,它实现了Java EE的Servlet和JavaServer Pages (JSP) 规范,用于部署和运行Java web应用程序。 【描述】"使用64位Win系统"意味着此版本的Tomcat是为64位Windows操作...
- 使用NIO连接器代替BIO,以处理大量并发连接。 - 配置JVM内存参数,如`-Xms`和`-Xmx`,根据服务器资源进行合理设定。 - 开启JVM的垃圾回收优化,如使用G1垃圾收集器。 - 使用缓存机制,如Ehcache,减轻数据库...
4. **NIO(非阻塞I/O)模式**:除了传统的BIO模式,Tomcat 6开始支持NIO,这为处理大量并发连接提供了更高的效率。 5. **更好的安全特性**:6.0.18版本包含了一些安全修复,提升了服务器的安全性,包括防止跨站请求...
- Tomcat 6.0在性能方面有所提升,例如通过改进线程池管理和连接器优化,使得Web应用程序处理请求的能力增强。 3. **更好的管理工具**: - 提供了更完善的管理工具,如`Manager App`和`Host Manager`,它们允许...
- **`executor="TomcatThreadPool"`**:指定使用名为`TomcatThreadPool`的线程池来处理请求。 - **`maxThreads`**:线程池的最大线程数,默认为150。 - **`minSpareThreads`**:线程池中保持的最小线程数,默认为100...
例如,`Connector`元素在`server.xml`中的配置可以决定服务器如何处理HTTP连接,包括使用NIO(非阻塞I/O)还是BIO(阻塞I/O)模式。 总结来说,Apache Tomcat 8.0.47是Java开发者的重要工具,用于部署和运行Java ...
4. **I/O操作优化**:减少不必要的I/O操作,利用缓冲技术提高读写效率,使用NIO(非阻塞I/O)替代传统的BIO。 5. **代码优化**:遵循编程最佳实践,如避免过度使用全局变量,减少循环内的计算,以及使用适当的算法...
此外,还可以通过监控Tomcat的运行状态,如查看线程池、内存使用情况等,来诊断性能问题。 10. **版本更新与兼容性**:尽管Apache Tomcat 6.0.16已经相对较旧,但它仍能与一些旧版本的Java虚拟机(JVM)兼容。然而...
2. **NIO.2和APR支持**:除了传统的BIO(阻塞I/O)模型,Tomcat 8引入了对Java NIO.2 API的支持,以及通过Apache Portable Runtime (APR)库的使用,提高了并发处理能力和系统资源利用效率。 3. **改进的WebSocket...
1. **线程池配置**:通过调整`conf/server.xml`中的`Executor`元素,可以定制线程池大小,优化并发性能。 2. **JVM调优**:根据应用需求,通过调整JVM参数(如堆内存大小、垃圾收集器类型等)来提升性能。 3. **...