`

线程关闭与定时任务

阅读更多
多线程

public class ThreadImpl extends AbstractThread{
private  AtomicLong num = new AtomicLong();
final Timer timer = new Timer("CS", true); //定时任务

public static void main(String[] args) {

final ThreadImpl t1 = new ThreadImpl();
System.out.println("*");
//t1.waitForRunning(3000);  //阻塞
t1.start();
System.out.println("***");

// try {
// t1.thread.join(5000); //等待t1线程执行5秒
// } catch (Exception e) {
// e.printStackTrace();
// }
System.out.println("*****");

t1.timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
               t1.num.getAndIncrement();
               System.out.println("CS :" + new Date());
            }
        }, 1000 * 3, 1000); //延迟3秒,每隔一秒执行一次
//t1.shutdown(true);
}

public void run() {
while (!this.isStopped()) {
System.out.println(".");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("..");

if(num.get()>=5){
timer.cancel(); //取消定时任务
}
}
}

public String getServiceName() {
return ThreadImpl.class.getName();
}
}

public abstract class AbstractThread implements Runnable {
    private static final long JOIN_TIME = 90 * 1000;

    protected final Thread thread;
    protected volatile AtomicBoolean hasNotified = new AtomicBoolean(false);
    protected volatile boolean stopped = false;

    public AbstractThread() {
        this.thread = new Thread(this, this.getServiceName());
    }

    public abstract String getServiceName();

    public void start() {
        this.thread.start();
    }

    public void shutdown() {
        this.shutdown(false);
    }

    public void shutdown(final boolean interrupt) {
        this.stopped = true;
        try {
            if (interrupt) {
                this.thread.interrupt();
            }
            if (!this.thread.isDaemon()) {
                this.thread.join(this.getJointime());
            }
        } catch (InterruptedException e) {
        }
    }

    public long getJointime() {
        return JOIN_TIME;
    }

    public void stop() {
        this.stop(false);
    }

    public void stop(final boolean interrupt) {
        this.stopped = true;
        if (interrupt) {
            this.thread.interrupt();
        }
    }

    public boolean isStopped() {
        return stopped;
    }
}
0
0
分享到:
评论

相关推荐

    定时任务及线程监控VC源码

    VC定时任务及线程监控,可指定需要监控的特定应用程序,可以定时开启/关闭进程,监视线程是否停止运行,根据线程情况重启计算机

    多线程定时关闭简单例子-易语言

    多线程定时关闭简单例子-易语言

    解决Python中定时任务线程无法自动退出的问题

    今天小编就为大家分享一篇解决Python中定时任务线程无法自动退出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    定时执行专家是一款制作精良、功能强大、简单易用的专业级定时任务执行软件,具有 18 种任务类型、12 种任务触发方式。

    《定时执行专家》是一款制作精良、功能强大、简单易用的专业级定时任务执行软件。软件具有 18 种任务类型、12 种任务触发方式,并且全面支持Cron表达式。软件采用多线程方式检测任务触发和任务执行,能够达到毫秒级...

    定时结束进程 v1.25.zip

    9.添加定时任务之前请勿修改窗口句柄,进程ID,进程路径,进程名,线程ID。 10.慎重添加系统进程。 11.如果同时选中“任务全部完成后关闭程序”和“任务全部完成后关机”,会跳过“任务全部完成后关闭程序”,执行...

    springboot schedule 解决定时任务不执行的问题

    主要介绍了springboot schedule 解决定时任务不执行的问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    定时执行专家-软件使用手册-2024年最新版 - 定时执行专家是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件

    《定时执行专家》具有 25 种【任务类型】、12 种【触发器】触发方式,并且全面支持界面化【Cron表达式】设置。软件采用多线程并发方式检测任务触发和任务执行,能够达到毫秒级的执行精度,可以同时支持200个以上任务...

    多任务定时器 v2.1

    “多任务定时器” 是一款面向任务的、多线程定时软件,可定时执行:播放影音、打开文件、提示信息、关闭进程、更换壁纸、屏保、关机、重启、休眠、注销、待机、关闭显示器、网络校时、语音报时...等任务。可按:整点...

    Android 定时联网更新天气或心情的例子.rar

    Android 定时联网更新天气或心情的例子,启动任务线程,关闭定时更新时间的任务线程,定时发送Intent更新时间,定时发送Intent更新心情内容,并给心情文本View添加监听器,防止切屏后widget不工作了,因为本例用不到...

    第7章-JUC多线程v1.1.pdf

    如果当前线程池中的线程数目>=corePollSize, 则每来一个任务, 会尝试将其添加到缓冲队列中, 如果添加成功, 则该任务会等待空闲线程将其取出去执行, 如果添加失败(一般是以为任务队列已经满了), 则会尝试创建新的线程...

    开源调度框架dolphinscheduler,2台机器上运行的任务无法立即停止,另外1台机器运行的任务可以立即停止

    4. 问题定位:打印3台机器的worker进程dump信息,发现215、216机器上,处理停止任务的线程发生了 一直 waiting 状态,找到 5. 解决方案:去掉processUtils.killYarnJob逻辑(hive、spark客户端执行,只需kill 本地...

    具有多线程的数据库备份程序forSQLServer

    2 多线程,程序运行后,主线程负责接收用户的操作,另外一个线程执行定时备份功能 3 程序最小化后在任务栏中显示为一颗跳动的心 4 程序关闭时保存设定的任务,下次运行程序时自动加载任务并继续执行。

    多任务定时器

    “多任务定时器” 是一款面向任务的、多线程定时软件,可定时执行:播放影音、打开文件、提示信息、关闭进程、更换壁纸、屏保、关机、重启、休眠、注销、待机、关闭显示器、网络校时、语音报时...等任务。可按:整点...

    具有多线程的数据库备份程序 for SQL Server

    本程序中应用了以下几种技术:1 大图标工具栏2 多线程,程序运行后,主线程负责接收用户的操作,另外一个线程执行定时备份功能3 程序最小化后在任务栏中显示为一颗跳动的心4 程序关闭时保存设定的任务,下次运行程序...

    Java并发编程(学习笔记).xmind

    任务与执行策略之间的隐形耦合 线程饥饿死锁 运行时间较长的任务 设置线程池的大小 配置ThreadPoolExecutor 构造参数 corePoolSize 核心线程数大小,当线程数,会创建线程执行runnable ...

    IIS7批量FTP客户端工具软件

    Abhay Bhushan在1971年编写的FTP规范,并作为RFC 114发布。... 3、定时任务 (定时上传、定时下载)  4、自定义传输模式,线程,编码  5、删除到回收站  6、大量文件快速加载,边加载边传输  7、批量连接一键关闭

    Java并发编程实战

    8.1 在任务与执行策略之间的隐性耦合138 8.1.1 线程饥饿死锁139 8.1.2 运行时间较长的任务140 8.2 设置线程池的大小140 8.3 配置ThreadPoolExecutor141 8.3.1 线程的创建与销毁142 8.3.2 管理队列任务142 ...

    fdm_2.5.700_source

    Free Download Manager是一个完全免费的多功能的下载和管理工具。...Free Download Manager 是一个强大的下载工具,支持多线程分割下载,支持定时下载和定时挂断连接,下载完成后断开连接或关闭计算机。

    网页自动操作通用工具 v3.50.rar

    支持使用代理服务器更换IP访问,定时任务在无人值守的情况下自动完成,程序可完全隐藏后台运行。 1、支持定时操作和多线程操作。 2、支持后台操作或者前台显示操作效果,可完全隐藏运行。 3、一个任务可针对同一...

    tcpKeppAliveAndHeartbeat.py

    python的socket模块建立tcp连接,直到连接成功,并开启线程接收数据,同时开启定时任务发送心跳检测,及时关闭socket连接

Global site tag (gtag.js) - Google Analytics