java线程的使用

在工作中,有些时候需要用到线程来提高程序的性能。

如:在某个操作需要完成的事情,但不直接反映操作结果的内容,可以通过异步线程完成。

大量数据的导出,推送等,可以使用线程池。

下面写点实例代码:

1.单个线程处理

//接口工具类,隐藏了一些东西,总体流程是:在业务代码处调用工具类,传入对应参数,对参数进行判断并执行对应方法

package com.client.util;


import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import net.sf.json.JSONObject;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import redis.clients.jedis.Jedis;

public class CancelOrderThreadUtil {
public Logger logger = Logger.getLogger(CancelOrderThreadUtil.class.getName());
private String escOrderId;
private String usrOnlyId;
private String Listid;
private Long count;
private String deleveryOrderId;
private String type;
private Long itemid;
private Long zoneId;

public CancelOrderThreadUtil(String escOrderId,String usrOnlyId,String Listid,Long count,String deleveryOrderId,String type,Long itemid,Long zoneId){
this.escOrderId = escOrderId;
this.usrOnlyId = usrOnlyId;
this.Listid = Listid;
this.count = count;
this.deleveryOrderId = deleveryOrderId;
this.type = type;
this.itemid = itemid;
this.zoneId = zoneId;
}

public void execute(){
ExecutorService si = Executors.newSingleThreadExecutor();
si.execute(new Runnable() {
            public void run() {
                try{
                   if(FxDeleveryConstant.CANCEL_ORDER_THREAD_TYPE.equals(type)){
                   Properties properties = PropertyUtil.get("dependProjectConfig.properties");
                   String cancelOrderUrl = properties.getProperty("CANCEL_ORDER_URL");
          logger.info("cancelOrderUrl :" + cancelOrderUrl);
          Map<String,Object> params = new HashMap<String, Object>();
          params.put("orderNumber", deleveryOrderId);
          JSONObject js = null;
          try {
          js = HttpInterfaceCallUtil.httpInterfaceCall(params, cancelOrderUrl);
          } catch (IOException e) {
          logger.info("失败!");
          }
          if(null == js){
          logger.info("失败!");
          }else{
          logger.info("cancel http code :"+MapUtils.getString(js, "code"));
          if(!FxDeleveryConstant.ALL_SUCCESSFUL.equals(MapUtils.getString(js, "code"))){
          logger.info("失败!");
          }
          }
                   }else if(FxDeleveryConstant.CANCEL_ORDER_THREAD_TYPE_RETURNED.equals(type)){
          RefundLimitUtil.refundLimit(usrOnlyId, itemid, count.toString(), escOrderId, zoneId);
                   }else{
                  ItemServiceClient itemServiceClient  = ItemTools.getItemServiceClient();
                  itemServiceClient.sellItem(itemid, -count.intValue());
                   }
                }catch (Exception e) {
                    logger.error(e,e);
                }
            }
        });
   si.shutdown();
}
}

页面调用:

CancelOrderThreadUtil cth = new CancelOrderThreadUtil(ctocOrder.getEscOrderid(), rdOrder.getBuyerUsronlyid().toString(), r.getListId().toString(), r.getDeliveryCount(), null, FxDeleveryConstant.CANCEL_ORDER_THREAD_TYPE_RETURNED,r.getItemId(),Long.parseLong(ctocOrder.getSellerNote6()));
cth.execute();



2.线程池

ExecutorService ex = Executors.newFixedThreadPool(1);

ex.execute(new Runnable() {
public void run() {
try {
long startTime2 = System.currentTimeMillis();
List<ExportDto> exportOrders = new ArrayList<ExportDto>();
ExecutorService ex = Executors.newFixedThreadPool(totalPage);
for (int i = 1; i <= totalPage; i++) {
final int j = i;
Future<List<ExportDto>> result = ex.submit(new Callable<List<ExportDto>>() {
public List<ExportOrderDetailDto> call(){
List<ExportOrderDetailDto> tempAll = new ArrayList<ExportOrderDetailDto>();
try {
queryOrder.setPageIndex(j);
ReturnOrderDto tempOrder = client.queryFxOrder(queryOrder);
for (FxOrderNewDto fond : tempOrder.getOrders()) {
long startTime3 = System.currentTimeMillis();
List<ExportOrderDetailDto> tempList = client.exportOrderDrtail(fond.getEscOrderId());
tempAll.addAll(tempList);
long endTime3 = System.currentTimeMillis();
logger.info("处理订单:"+fond.getEscOrderId()+"--耗时:"+(endTime3 - startTime3) + "ms");
}
} catch (Exception e) {
logger.error(e);
}
return tempAll;
}
});
exportOrders.addAll(result.get());
}
Client.updateOpcDownloadByData( exportOrders);
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
}
});
ex.shutdown();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值