java 多线程卖票简单实例

1.ThreadPoolExecutor
	/***
	 * @author Administrator
	 * @deprecated sale ticket
	 * 
	 * 0.count ticket count = 0
	 * 1.change ticket type =1
	 * 2.--ticket_num
	 * @return
	 * @throws InterruptedException
	 * @throws ExecutionException
	 */
	@RequestMapping(value="/sale")
	@ResponseBody
	public JSONObject saleTicket() throws InterruptedException, ExecutionException {
		JSONObject backJson = new JSONObject();
		ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

		ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 100, 5000, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(50), new ThreadPoolExecutor.AbortPolicy());// new ThreadPoolExecutor(5, 50, 5000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runable>(100), new ThreadPoolExecutor.AbortPolicy());
		for(int i=0;i<120;i++) {
			TicketTask thread = new TicketTask(i);
			Future future = threadPoolExecutor.submit(thread);
			int status = (int) future.get();
			backJson.put("STATUS"+i, status);
		}
		backJson.put("CODE", ReturnMsg.SUCCESS.getCode());
		backJson.put("MSG", ReturnMsg.SALE_TICKET_EXCEPTION.getMsg());
		log.info("BackJson: "+backJson);
		return backJson;
	}
2.实现类
import java.util.concurrent.Callable;
import org.apache.log4j.Logger;
import tk.mybatis.springboot.conf.InitializeBean;
import tk.mybatis.springboot.mapper.TicketMapper;

public class TicketTask implements Callable<Object>{
	Logger logger = Logger.getLogger(TicketTask.class);
	private int name;
	TicketMapper ticketMapper = (TicketMapper) InitializeBean.getBean("ticketMapper");
	@Override
	public Object call() throws Exception {
		// TODO Auto-generated method stub
		int tnum = ticketMapper.countTicket();
		if(tnum == 0) {
			logger.info("ticket is null!");
			return -666;
		}
		int status = sale();
		return status;
	}
	
	public synchronized int sale() {
		try {
			int s1 = ticketMapper.saleTicketByType();
			if(s1 != 1) {
				logger.info("update sale ticket by type is failed");
				return -666;
			}
			logger.info("sale by type num:"+s1);
			int s2 = ticketMapper.saleTicketByNum();
			logger.info("sale ticket num:"+s2);
		} catch (Exception e) {
			// TODO: handle exception
			logger.info("sale ex",e);
			return -666;
		}

		return 666;
	}
	
	public TicketTask(int name) {
		this.name = name;
	}
	public int getName() {
		return name;
	}
	public void setName(int name) {
		this.name = name;
	}

}


猜你喜欢

转载自blog.csdn.net/shy415502155/article/details/80505303