博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的线程池管理多线程
阅读量:6375 次
发布时间:2019-06-23

本文共 2130 字,大约阅读时间需要 7 分钟。

hot3.png

随tomcat启动的servlet来启动线程

public class MyExpServlet extends HttpServlet {	private static final long serialVersionUID = 1L;	private MyExpThread myExpThread;	private MyStockThread myStockThread;	public MyExpServlet() {	}	public void init() {		String str = null;		if (str == null && myExpThread == null) {			myExpThread = new MyExpThread();			myStockThread = new MyStockThread();//			myExpThread.start(); // servlet 上下文初始化时启动 socket//			System.out.println("线程开始!");			//创建一个含有2个线程的线程池		    ExecutorService threadPool = Executors.newFixedThreadPool(2);		    // 线程池中执行线程		    threadPool.execute(myExpThread);		    threadPool.execute(myStockThread);		    threadPool.shutdown();//			myExpThread.interrupt();//			try {//				myExpThread.join();//			} catch (InterruptedException e) {//				e.printStackTrace();//			}//			System.out.println("线程结束!"); 		}	}	public void doGet(HttpServletRequest httpservletrequest,			HttpServletResponse httpservletresponse) throws ServletException,			IOException {	}	public void destory() {		if (myExpThread != null && myExpThread.isInterrupted()) {			myExpThread.interrupt();		}	}}

上个线程在前几个博客,这个线程用来付款时间超过30分钟就修改订单状态并将商品库存和销售量修改回来

class MyStockThread extends Thread {	public void run() {		while (!this.isInterrupted()) {// 线程未中断执行循环			// ------------------ 开始执行 ---------------------------			//订单失效时间及id			Vector list_indiana = Constant.list_indiana;			if(list_indiana!=null&&!list_indiana.isEmpty()){				for(int i=0;i

线程每分钟启动一次,为了避免每分钟查询数据库,定义一个并发容器作为全局变量,而我需要全局变量要存所有下单的商品信息和订单号,所以选择list的大哥Vector,并定义实体Order_Invalid,将数据存入实体,在将实体对象存入Vector。

public static Vector
 list_ordertime = new Vector
();//Order_Invalid  普通商品public static Vector
 list_indiana = new Vector
();//Order_Invalid   一元夺宝public static final int time = 2;

通过线程池提供的参数进行监控。线程池里有一些属性在监控线程池的时候可以使用

  • taskCount:线程池需要执行的任务数量。

  • completedTaskCount:线程池在运行过程中已完成的任务数量。小于或等于taskCount。

  • largestPoolSize:线程池曾经创建过的最大线程数量。通过这个数据可以知道线程池是否满过。如等于线程池的最大大小,则表示线程池曾经满了。

  • getPoolSize:线程池的线程数量。如果线程池不销毁的话,池里的线程不会自动销毁,所以这个大小只增不+ getActiveCount:获取活动的线程数。

转载于:https://my.oschina.net/githubhty/blog/660850

你可能感兴趣的文章
安全专家详解“浏览器Fuzzing技术”
查看>>
事件、过程驱动与Java的一些瞎想。
查看>>
mysql下使用select into outfile来备份数据
查看>>
C++新特性-引入关键字auto
查看>>
Linux 判断文件是否完整
查看>>
wpa_supplicant软件架构分析 (与驱动通信的接口)
查看>>
OpenERP PyChart 中文报表模块(支持CJK语言)
查看>>
利用VisualVM排除应用性能故障
查看>>
创新需学张无忌
查看>>
SAX DOM解析xml
查看>>
策略模式和模板模式的区别
查看>>
《Java性能优化指南》读书笔记-应用性能分析
查看>>
JavaIO<14>InputStreamReader和OutputStreamWriter源码分析
查看>>
为什么iOS比Android更吸引开发者
查看>>
基于百度地图API的微信周边搜索
查看>>
windows下自动打包编译重启服务脚本
查看>>
SpringCloud |第七篇: 消息总线(Bus)
查看>>
maven学习笔记
查看>>
顶级ntp服务器配置
查看>>
eclipse常用的快捷键
查看>>