`

线程关闭与定时任务

阅读更多
多线程

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
分享到:
评论

相关推荐

    Go-提供多线程定时任务

    在Go语言中,实现多线程定时任务是一个常见的需求,特别是在服务器端编程或者后台任务处理中。Go语言的并发模型是基于CSP(Communicating Sequential Processes)理论的,通过goroutine和channel来实现轻量级线程和...

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

    在IT领域,定时任务和线程监控是两个重要的概念,特别是在系统管理和自动化操作中。本文将深入探讨这些知识点,并结合“VC定时任务及线程监控”这个主题进行详细阐述。 首先,定时任务(Scheduled Tasks)是指按照...

    java轻松实现—定时任务

    在Java中,我们可以利用`java.util.Timer`类和`java.util.TimerTask`类来实现简单的定时任务,但这种实现方式存在线程安全问题。在Web应用中,我们可以利用Servlet容器提供的特性来更优雅地处理定时任务,这就是描述...

    asp.net定时任务(定时器)

    - `System.Threading.Timer`:适合于需要在单独线程上运行的定时任务,避免阻塞UI线程。 - `System.Timers.Timer`:在多线程环境中,此定时器会自动管理线程,更适合服务器端应用。 3. **创建定时器**: 首先,...

    页面控制定时任务源码

    这个主题主要涉及两个核心概念:前端页面交互与后台定时任务。 **前端页面控制** 前端页面控制通常是指在浏览器端通过JavaScript或者其他前端框架(如React、Vue、Angular等)实现的功能。JavaScript是页面交互的...

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

    通过学习这个易语言的多线程定时关闭简单例子,开发者不仅可以掌握多线程和定时任务的基本用法,还能了解到线程安全、资源管理以及异常处理等重要编程技巧。这些知识对于提升编程技能和编写高效、稳定的软件具有重要...

    Quartz 定时任务web使用

    Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...

    定时任务修复版本(C#修复之前周期执行任务的不结束问题)

    1. **计时器未正确关闭**:在C#中,如果使用Timer类创建了定时任务,但没有在适当的时候调用Stop()方法,那么计时器将持续触发事件,导致任务无法结束。 2. **异步操作未妥善处理**:如果任务内部包含异步操作,如...

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

    ### 解决Python中定时任务线程无法自动退出的问题 在Python编程中,处理定时任务时经常需要用到`threading`模块中的`Timer`类。然而,使用`Timer`类创建的定时任务线程可能会遇到一个问题:当主程序退出时,这些...

    Java定时执行某个任务

    `Timer`适合简单的定时任务,而`ScheduledExecutorService`更适合复杂的需求,如多线程环境和高并发场景。选择哪种方式取决于具体的应用场景和性能需求。在实际开发中,理解并熟练掌握这两种方法能帮助我们编写出...

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

    在这个“易语言-多线程定时关闭简单例子”中,我们将探讨如何在易语言中实现多线程以及定时器功能,这对于理解和应用易语言进行系统级操作或者自动化任务具有重要的学习价值。 首先,我们要理解什么是多线程。在...

    Spring quartz 定时任务调度

    Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...

    应用sevlet和线程同步实现定时

    当我们需要在Web应用程序中实现定时任务时,Servlet和线程同步可以结合使用。下面将详细探讨如何利用Servlet和线程同步来实现定时功能,以及与消息队列代码的相关性。 首先,让我们理解Servlet的工作原理。Servlet...

    .Net多线程计划任务

    在.NET框架中,多线程和定时任务是两个重要的编程概念,它们经常被用来实现复杂的系统功能,如后台服务、数据同步和定时触发的操作。在这个`.Net多线程计划任务`的示例中,我们主要关注如何利用`.NET Timer`组件来...

    java定时器定时调用任务

    4. 取消任务和关闭定时器:如果不再需要定时任务,可以使用`cancel()`方法取消任务,用`timer.cancel()`停止整个定时器。 ```java myTask.cancel(); // 取消单个任务 timer.cancel(); // 关闭定时器 ``` 在实际...

    ASP.NET定时任务

    ASP.NET定时任务是一种在Web应用程序中执行预定任务的技术,它允许开发者在特定时间或间隔执行某些操作,如数据同步、日志清理、发送邮件等。ASP.NET提供了多种方式来实现定时任务,包括System.Threading.Timer、...

    计划任务 定时执行

    在Python中,可以使用`APScheduler`库来创建复杂的定时任务,它可以与多种调度策略(如固定间隔、指定时间点、日历事件等)配合使用。例如,以下是一个简单的Python定时任务示例,每隔5秒打印一条消息: ```python ...

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

    但是,如果定时任务非常多或者有的任务很耗时,会影响到其他定时任务的执行,因为 Schedule 默认是单线程的,一个任务在执行时,其他任务是不能执行的。 解决办法是重新配置 Schedule,改为多线程执行。只需要增加...

    maven-quartz(定时任务)最简单版本

    而将Quartz与Maven结合,可以方便地管理和构建项目,使得定时任务的开发更加便捷。 【集成Quartz到Maven项目】 1. 首先,在Maven项目的`pom.xml`文件中添加Quartz的依赖: ```xml <groupId>org.quartz-...

    定时关闭程序Demo

    总结来说,“定时关闭程序Demo”是一个关于编程实现定时任务的实例,它涉及到操作系统级别的接口调用、多线程编程以及用户交互设计。不论是在桌面应用还是服务器场景,理解和掌握定时任务的实现都是IT专业人士必备的...

Global site tag (gtag.js) - Google Analytics