Thread usage - abstract class usage

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

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


/**
 * Thread base class
 *
 * Record thread start time/end time/thread name/thread attribute parameters
 * @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;//Start time

    private String threadName;//Thread name

    private Long endTime;//End time

    private Long removeDelay = 0l;//How long to remove management after the thread ends, in seconds

    private volatile boolean isRun;//Whether the thread is running

    /**
     * only define the thread name,
     * Thread state data is deleted after removeDelay seconds after the execution of thread state data is completed
     * @param threadName
     * @param removeDelay is less than or equal to 0 to delete after execution
     */
    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("The lottery thread is abnormal.");
            logger.error(e.getMessage(),e);
        } finally {
            logger.info("Lottery thread status data removed.");
            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 is a unique identifier
    public static Map<String, BaseThread> map = new HashMap<String, BaseThread>();

    /**
     * Execute the thread and put the thread into the management MAP
     *
     * @param thread
     * @create_time 2010-12-29 8:33:15 PM
     */
    public static void excute(BaseThread thread) {
        map.put(thread.getThreadName(), thread);
        threadExec.execute(thread);

    }

    /**
     * Check if the thread is running
     * @param threadName
     * @return T is F or not
     * @create_time 2010-12-29 8:55:13 PM
     */
    public static boolean isExcute(String threadName) {
        BaseThread thread = map.get(threadName);
        if (thread == null) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * delete thread data
     * @param threadName
     * @create_time 2010-12-29 09:46:48 PM
     */
    public static void removeThreadData(String threadName) {
        map.remove(threadName);
    }

    /**
     * Traverse to remove timeout thread data
     *
     * @create_time 2010-12-29 09:58:15 PM
     */
    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;

/**
 * Reward thread
 *
 * @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);
        }
    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326516693&siteId=291194637