`

jetty thread pool两种实现方式

阅读更多

1.自带的pool

QueuedThreadPool pool = new QueuedThreadPool();		
			pool.setMinThreads(Integer.parseInt(PropertiesUtil.getValue("api_threadpool_min_size")));
			pool.setMaxThreads(Integer.parseInt(PropertiesUtil.getValue("api_threadpool_max_size")));
			pool.setMaxIdleTimeMs(200);


			SelectChannelConnector connection0 = new SelectChannelConnector();

			connection0.setPort(Integer.parseInt(PropertiesUtil.getValue("jetty.port")));
			
			connection0.setMaxIdleTime(10000);

			server.setThreadPool(pool);

 小技巧:

这里可以设置只接受的线程数,如果超过,那么等待的线程立刻回复busy

if (pool.getThreads() >= pool.getMaxThreads()) {
			WritePrint(response, "<?xml version=\"1.0\"?><Request><ErrorCode>2</ErrorCode><ResponseMsg>System is busy</ResponseMsg></Request>");
			logger.info("Return response:<?xml version=\"1.0\"?><Request><ErrorCode>2</ErrorCode><ResponseMsg>System is busy</ResponseMsg></Request>");
			return;			
		}
public void WritePrint(HttpServletResponse response, String outWriter) {
		try {
			PrintWriter out = response.getWriter();
			out.println(outWriter);
			out.flush();
			out.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}

  

注意:jetty主线程占一条,最后等于max thread的线程会rejected,所以实际执行的线程数是(设置的MAX线程-2)

 

2.第三方pool

先建立pool类

public class ThreadPool {

	private static Logger logger = LoggerFactory.getLogger(IrapiServer.class);
	
	
	private ThreadPool() {}

	private static ThreadPoolExecutor pool;
	
	public static void initThreadPool(ThreadPoolExecutor pool){
		ThreadPool.pool = pool;
	}
	
	public static ThreadPoolExecutor createThreadPool() {
		int corePoolsize = Integer.valueOf(PropertiesUtil.getValue("api_threadpool_min_size"));
		int maximumPoolSize = Integer.valueOf(PropertiesUtil.getValue("api_threadpool_max_size"));
		BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
		logger.info("create thread pool: corePoolsize=" + corePoolsize
				+ ", maximumPoolSize=" + maximumPoolSize);
		ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
				corePoolsize, maximumPoolSize, 1, TimeUnit.SECONDS, queue,
				new ThreadPoolExecutor.CallerRunsPolicy());
		return threadPoolExecutor;
	}
	
	public static ThreadPoolExecutor getThreadPool(){
		return ThreadPool.pool;
	}
}

 

然后在主方法中调用:

ThreadPool.initThreadPool(ThreadPool.createThreadPool());

 

最后,service类要继承线程类,然后执行:

ThreadPool.getThreadPool().execute(irapiServiceHandler);

 

这样设置等待线程的线程立刻rejected:

if ((ThreadPool.getThreadPool().getTaskCount() - ThreadPool.getThreadPool().getCompletedTaskCount()) >=  maximumPoolSize) {
			WritePrint(response, "<?xml version=\"1.0\"?><Request><ErrorCode>2</ErrorCode><ResponseMsg>System is busy</ResponseMsg></Request>");
			logger.info("Return response:<?xml version=\"1.0\"?><Request><ErrorCode>2</ErrorCode><ResponseMsg>System is busy</ResponseMsg></Request>");
			return;
		}

 

分享到:
评论

相关推荐

    jetty嵌入Web编程多种实现方式案例

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器功能直接嵌入到Java应用程序中,...通过深入理解并实践Jetty的多种实现方式,开发者能够更好地掌控Web应用程序的生命周期和性能。

    用jetty8.0写的websocket实现的简单聊天程序

    在这个“用jetty8.0写的websocket实现的简单聊天程序”中,我们将深入探讨如何利用Jetty 8.0这个轻量级、高性能的Java Web服务器和Servlet容器来构建WebSocket应用。 Jetty是一个开源的HTTP服务器和Servlet容器,...

    jetty实现websocket功能

    WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。Jetty是一个轻量级、高性能的Java Web服务器和Servlet容器,它也支持...

    通过Jetty实现文件上传下载的小工具

    NULL 博文链接:https://vista-rui.iteye.com/blog/1386427

    jetty内嵌实现

    总结来说,Jetty内嵌实现是一种快速启动Web服务的方式,特别适合开发和测试环境。通过Maven管理依赖,编写简单的Java代码即可启动服务器。这种方式提高了开发效率,降低了部署复杂度,使得我们可以更加专注于应用的...

    jetty+maven webapp,http,https实现的简单demo

    在本DEMO中,我们将利用Jetty作为服务器,提供HTTP和HTTPS两种服务。 **2. Maven配置** Maven是Java项目管理工具,通过其POM(Project Object Model)文件管理项目依赖。在本DEMO中,我们需要在POM.xml文件中添加...

    jetty启动器资源配置文件

    `jetty.xml`的核心配置通过`&lt;Configure&gt;`标签实现,该标签用于配置Jetty服务器实例。 ##### 3.1 Server实例配置 配置一个ID为“Server”的Jetty服务器实例: ```xml &lt;Configure id="Server" class="org.eclipse....

    jetty 8及依赖包

    这个压缩包包含Jetty 8版本的实现及其依赖库,是学习和理解Jetty工作原理,尤其是NIO(非阻塞I/O)和Servlet容器实现的宝贵资源。 Jetty 8在设计时特别强调了性能和可扩展性,它使用了Java NIO(New I/O)API来处理...

    jetty-6.1.26源码

    例如,`org.eclipse.jetty.util.thread`包下的`QueuedThreadPool`是Jetty的默认线程池,它优化了线程的创建和销毁,提高了服务器性能。 4. **连接器(Connector)**:Jetty通过`Connector`组件与网络通信,如`...

    jetty各个版本下载

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛应用于各种规模的项目,从小型的个人项目到大型的企业级应用。...无论你是新手还是经验丰富的开发者,Jetty都能提供一个理想的平台来实现你的想法。

    jetty6.1.6-2

    7. **配置灵活性**:Jetty提供了多种方式来配置服务器,包括XML配置文件、程序化API以及基于注解的配置。 8. **模块化**:Jetty的lib目录可能包含多个模块的JAR,如jetty-util.jar、jetty-http.jar等,这种模块化...

    jetty-6.1.26.zip

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,与Tomcat相似,它为开发和部署Web应用程序提供了一种高效的选择。Jetty在设计上注重灵活性和可扩展性,使得它在处理HTTP协议、WebSocket协议以及部署各种...

    jetty相关的全部jar包

    jetty-security-9.4.8.v20171121.jar,jetty-io-9.4.8.v20171121.jar,jetty-continuation-9.4.8.v20171121.jar,jetty-client-9.4.8.v20171121.jar,jetty-jmx-9.4.8.v20171121.jar,jetty-plus-9.4.8.v20171121....

    jetty指导书

    Comet是一种实现实时双向通信的技术,Jetty也支持通过Continuations实现Comet功能。 #### 十五、Embedding Jetty **15.1 嵌入式使用** Jetty的轻量级和灵活性使其非常适合嵌入到其他Java应用中。通过调用Jetty...

    实战 Jetty--让你快速速学会jetty

    此外,Jetty的轻量化使得将其嵌入到Java应用程序中变得异常简单,只需少量代码即可实现。 在可扩展性方面,Jetty针对高并发和长时间连接的Web 2.0应用进行了优化。它利用Continuation机制有效地处理大量用户请求和...

    eclipse jetty插件run-jetty-run-1.3.3

    eclipse jetty插件,从...下载run-jetty-run.zip文件,解压后再编写个links文件丢到eclipse的dropins目录下即可,省去了使用eclipse update方式安装的麻烦。 link文件样例如: path=d:\\eclipse_plugins\\run-jetty-run

    Jetty 学习资料汇总

    4. **嵌入式Jetty**:阐述如何将Jetty直接嵌入到应用程序中,实现更灵活的部署方式。 5. **故障排查与日志**:介绍如何配置和使用Jetty的日志系统,以及常见问题的解决方法。 通过上述内容的学习,你将能够熟练地...

    jetty嵌入式服务器实例大全

    Jetty是Servlet规范的实现者,支持Servlet 3.1及以上版本。你可以通过创建`Server`对象,然后添加`ServletHandler`或`ServletContextHandler`来注册Servlet。例如,使用`addServlet()`方法指定Servlet类和映射路径...

    Jetty权威指南.pdf

    对于高可用性和负载均衡的需求,Jetty支持会话复制,通过在多个Jetty实例之间复制会话数据,实现应用的水平扩展。 #### 十三、性能优化 **13.1 线程池** 合理配置线程池可以显著提升Jetty的性能。通过调整线程池...

    应用服务器jetty8.0

    Jetty 8.0是Java应用服务器的一种,主要用于托管Web应用程序。它是一个开源项目,以其轻量级、高效和易于集成的特点在开发社区中受到欢迎。Jetty支持Servlet 3.0规范,提供了对WebSocket协议的早期支持,这在当时是...

Global site tag (gtag.js) - Google Analytics