线程运用-抽象类使用


package com.xxx.betcart.server.service.impl.threadmanager;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
* 线程基本类
*
* 记录线程开始时间/结束时间/ 线程名称/线程属性参数
* @project commonsTiger
* @author alanpeng
* @date 2011-1-7
* Copyright (C) 2010-2012 www.2caipiao.com Inc. All rights reserved.
*/
public abstract class BaseThread implements Runnable {
private transient final Logger logger = LoggerFactory.getLogger(BaseThread.class);

private Long startTime;//开始时间

private String threadName;//线程名字

private Long endTime;//结束时间

private Long removeDelay = 0l;//线程结束后多久移除管理,单位秒

private volatile boolean isRun;//线程是否运行中

/**
* 只定义线程名,
* 线程状态数据执行完成removeDelay秒后删除
* @param threadName
* @param removeDelay 小于等于0执行完后删除
*/
public BaseThread(String threadName, Long removeDelay) {
this.threadName = threadName;
this.removeDelay = removeDelay;
}

@Override
public void run() {

try {
startTime = System.currentTimeMillis();
excuteTask();
endTime = System.currentTimeMillis();
} catch (Exception e) {
logger.error("开奖线程异常。");
logger.error(e.getMessage(),e);
} finally {
logger.info("开奖线程状态数据移除。");
ThreadManage.removeThreadData(threadName);

}

}

public abstract void excuteTask();

public Long getStartTime() {
return startTime;
}

public void setStartTime(Long startTime) {
this.startTime = startTime;
}

public String getThreadName() {
return threadName;
}

public void setThreadName(String threadName) {
this.threadName = threadName;
}

public Long getEndTime() {
return endTime;
}

public void setEndTime(Long endTime) {
this.endTime = endTime;
}

public Long getRemoveDelay() {
return removeDelay;
}

public void setRemoveDelay(Long removeDelay) {
this.removeDelay = removeDelay;
}

public boolean isRun() {
return isRun;
}

public void setRun(boolean isRun) {
this.isRun = isRun;
}

}




package com.xxx.betcart.server.service.impl.threadmanager;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledThreadPoolExecutor;


public class ThreadManage {

public static ScheduledThreadPoolExecutor threadExec = new ScheduledThreadPoolExecutor(50);

//key为唯一的标识
public static Map<String, BaseThread> map = new HashMap<String, BaseThread>();

/**
* 执行线程,并把线程放入管理MAP中
*
* @param thread
* @create_time 2010-12-29 下午08:33:15
*/
public static void excute(BaseThread thread) {
map.put(thread.getThreadName(), thread);
threadExec.execute(thread);

}

/**
* 检查线程是否运行中
* @param threadName
* @return T 是 F不是
* @create_time 2010-12-29 下午08:55:13
*/
public static boolean isExcute(String threadName) {
BaseThread thread = map.get(threadName);
if (thread == null) {
return false;
} else {
return true;
}
}

/**
* 删除线程数据
* @param threadName
* @create_time 2010-12-29 下午09:46:48
*/
public static void removeThreadData(String threadName) {
map.remove(threadName);
}

/**
* 遍历移除超时线程数据
*
* @create_time 2010-12-29 下午09:58:15
*/
public static void removeThreadDataTimeOut() {
for (String name : map.keySet()) {
BaseThread thread = map.get(name);
if (thread.getEndTime() != null && thread.getRemoveDelay() > 0) {
if (System.currentTimeMillis() > (thread.getEndTime() + thread.getRemoveDelay())) {
removeThreadData(name);
}
}
}
}

public static void main(String[] args) throws Exception {

}
}




package com.xxx.betcart.server.service.impl.threadmanager.thread;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.xxx.betcart.common.service.BetPlanPackageService;
import com.xxx.betcart.server.service.impl.threadmanager.BaseThread;

/**
* 派奖线程
*
* @project admin
* @author alanpeng
* @date 2011-6-2
* Copyright (C) 2010-2012 www.2caipiao.com Inc. All rights reserved.
*/
public class SychronizedPrizeThread extends BaseThread {

private transient final Logger logger = LoggerFactory.getLogger(SychronizedPrizeThread.class);

private long packageId;
private BetPlanPackageService betPlanPackageService;

public SychronizedPrizeThread(String threadName,
long packageId, BetPlanPackageService betPlanPackageService) {
super(threadName,0l);
this.packageId = packageId;
this.betPlanPackageService = betPlanPackageService;
}
public void excuteTask() {
try {
setRun(true);
Thread.currentThread().setName(this.getThreadName());
betPlanPackageService.synchronousPrizeByPackageId(packageId);
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
setRun(false);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值