`
jin8000608172
  • 浏览: 136057 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

线程运用-抽象类使用

阅读更多
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);
        }
    }
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    C#入门——面向对象等,代码+注释

    第11天 02 抽象类 Animal Cat Dog Program 02-抽象类 Animal Program 03抽象类练习 04复习 06接口 05设计模式 06序列化 07partial部分类 08sealed密封类 01面向对象-多态 第12天 01接口 02接口的特点 03接口练习 03...

    侯捷- -深入浅出MFC

    自定SERIAL宏给抽象类使用 在CObList中加入CStroke以外的类 Document与View交流——为Step4做准备 第9章 消息映射与命令传递 到底要解决什么 消息分类 万流归宗Command Target(CCmdTarget) 三个奇怪的宏,一张巨大...

    java课程设计报告-五子棋.doc

    //包的定义 Import java.awt.Color //导入包关键字Import 4、接口 、接口的定义 Java中的接口可以看成是一种抽象类,它是一些抽象方法和常量的集合,其主要作用 是使得处于不同层次上以至于互不相干的类能够执行...

    java课程设计报告-五子棋(1).doc

    //包的定义 Import java.awt.Color //导入包关键字Import 4、接口 、接口的定义 Java中的接口可以看成是一种抽象类,它是一些抽象方法和常量的集合,其主要作用 是使得处于不同层次上以至于互不相干的类能够执行...

    java课程设计报告-五子棋(2).doc

    //包的定义 Import java.awt.Color //导入包关键字Import 4、接口 、接口的定义 Java中的接口可以看成是一种抽象类,它是一些抽象方法和常量的集合,其主要作用 是使得处于不同层次上以至于互不相干的类能够执行...

    AIC的Java课程1-6章

     理解抽象方法,抽象类,具体类。  学会使用接口,接口中定义的数据与方法。学会实现接口。  辨别抽象类与接口的异同点。  清楚如何通过向上转型(引用的隐式转型),方法重写,运行期绑定来实现...

    java包与接口实验报告

    API 包—方面提供丰富的类与方法供大家使用,如画图形、播放声音等,另一方面又负责和系统软硬件打交道,圆满实现用户程序的功能。所有Java API 包都以“java.”开头,以区别用户创建的包。 常见Java系统包及其作用...

    JAVA 范例大全 光盘 资源

    实例21 图形面积与周长(抽象类) 54 实例22 宠物结婚(封装) 56 实例23 一个盒子(继承) 58 实例24 学生的生活(多态) 60 实例25 员工薪资(接口) 62 实例26 我的类型(instanceof运算符) 66 实例27 ...

    精通ANDROID 3(中文版)1/2

    14.4.3 使用LightedGreenRoom抽象唤醒锁  14.5 长期运行的服务的实现  14.5.1 非粘滞性服务的细节  14.5.2 粘滞性服务的细节  14.5.3 非粘滞性的变体:重传送(redeliver)Intent  14.5.4 在...

    精通Android 3 (中文版)2/2

    14.4.3 使用LightedGreenRoom抽象唤醒锁  14.5 长期运行的服务的实现  14.5.1 非粘滞性服务的细节  14.5.2 粘滞性服务的细节  14.5.3 非粘滞性的变体:重传送(redeliver)Intent  14.5.4 在...

    Java之IO流学习总结

    InputStream 是所有的输入字节流的父类,它是一个抽象类。 ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。...

    Programming C#(第4版)(中文版)part1

    抽象类 115 万类之根:Object 119 类型的装箱和拆箱 121 嵌套类 124 第6章 操作符重载 127 使用operator关键字 127 支持其他.NET语言 128 创建有用的操作符 128 逻辑操作符对 129 等于操作符 129 转换操作符 130 第7...

    Programming C#(第4版)(中文版)part3

    抽象类 115 万类之根:Object 119 类型的装箱和拆箱 121 嵌套类 124 第6章 操作符重载 127 使用operator关键字 127 支持其他.NET语言 128 创建有用的操作符 128 逻辑操作符对 129 等于操作符 129 转换操作符 130 第7...

    Programming C#(第4版)(中文版)part2

    抽象类 115 万类之根:Object 119 类型的装箱和拆箱 121 嵌套类 124 第6章 操作符重载 127 使用operator关键字 127 支持其他.NET语言 128 创建有用的操作符 128 逻辑操作符对 129 等于操作符 129 转换操作符 130 第7...

    深入浅出MFC【侯捷】

    :Serialize CArchive类 operator《和operator》 效率考虑 自定SERIAL宏给抽象类使用 在CObList中加入CStroke以外的类 Document与View交流——为Step4做准备 第9章 消息映射与命令传递 到底要解决什么 消息分类 万流...

    深入浅出MFC 2e

    自定SERIAL宏给抽象类使用 在CObList中加入CStroke以外的类 Document与View交流——为Step4做准备 第9章 消息映射与命令传递 到底要解决什么 消息分类 万流归宗Command Target(CCmdTarget) 三个奇怪的宏,一张巨大...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    6.1.4 抽象方法、抽象类 173 6.2 继承语法细节 174 6.2.1 protected成员 174 6.2.2 重新定义的细节 176 6.2.3 再看构造函数 178 6.2.4 再看final关键字 180 6.2.5 java.lang.object 181 6.2.6 关于...

    二十三种设计模式【PDF版】

    设计模式之 Template(模板方法) 实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使用很普遍. 设计模式之 Strategy(策略) 不同算法各自封装,用户端可随意挑选需要的算法. 设计模式之 Chain of ...

    Java范例开发大全 (源程序)

     实例193 使用GregorianCalendar类获取系统的当前时间 326  实例194 使用SimpleDateFormat类获取系统的当前时间 329  实例195 显示某年某月某一周的信息 330  实例196 显示某年某月的信息 332  实例197 ...

Global site tag (gtag.js) - Google Analytics