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;
}
}