java多线程实现定时器任务

volatile是一个弱同步机制关键字,只能实现同步机制中的可见功能,不能实现互斥访问。用在变量的声明上时,表示多个线程获取此变量时,都是最新的数据(变量会自动更新最新数据)。synchronized 是一个内置锁,也就是java内部加锁机制。用在方法上时,每个线程进入的时候,它会获得方法所在的对象的锁,离开方法后释放对象锁。 自定义定时任务   任务管理类
package com.effectJava.Chapter3;

import java.util.concurrent.TimeUnit;

public class ManagerTask {

    private  static  boolean isManagerTaskEnd;

    public synchronized  static void setIsManagerTaskEnd(boolean flage) {
       isManagerTaskEnd = flage;
    }

    public synchronized static boolean isIsManagerTaskEnd() {
        return isManagerTaskEnd;
    }

//    private static mytimeTask timetask = new mytimeTask();

    public static void main(String... args) throws Exception {
//        开启任务线程
        new Thread(){
            @Override
            public void run() {
                while (true){
                    if(isIsManagerTaskEnd()){//没开启任务线程
                        setIsManagerTaskEnd(false);
                        new mytimeTask().start();
                    }
                }

            }
        }.start();
        //开启timetask任务
        setIsManagerTaskEnd(true);

        TimeUnit.SECONDS.sleep(1);

        //关闭
//        setIsManagerTaskEnd(false);
        //关闭timetask
        mytimeTask.setFlagesTrue(true);

        TimeUnit.SECONDS.sleep(2);

        mytimeTask.setFlagesTrue(false);
        setIsManagerTaskEnd(true);

    }

}

任务处理类

package com.effectJava.Chapter3;

public class mytimeTask  extends   Thread{

    private  volatile  static boolean flages ;

    private  static  int count;
    //设置可见性
    public static   boolean isFlages() {
        return flages;
    }

    public  static   void setFlagesTrue(boolean flage) {
        flages = flage;
    }

    @Override
    public void run() {
        while (!isFlages()) {
            System.out.println("执行任务");
            //执行任务代码
        }
    }

    public  synchronized static  int reCount() {
        return count++;
    }

    public  synchronized static  int getCount() {
        return count;
    }
}

原文地址:https://www.cnblogs.com/09120912zhang/p/8393692.html

时间: 2024-10-08 06:30:18

java多线程实现定时器任务的相关文章

JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.csdn.net/m366917 我们来继续学习多线程 Lock锁的使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock Lock void lock():获取锁 v

Java多线程基础(二)定时器类:Timer类和TimerTask类

Java多线程基础(二)定时器类:Timer类和TimerTask类 Timer类和TimerTask类是jdk实现定时器功能的早期方法,jdk1.5以前就支持Timer类和TimerTask类.JDK1.5之后引入了新的机制,将在后续博文中研究. 1 指定时间间隔后执行任务 import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TraditionalTimerTest {

Java多线程 定时器

Java多线程中的定时器(java.util.Timer)有定时执行任务的功能,通过设定定时器的间隔时间,会自动在此间隔后执行预先安排好的任务(java.util.TimerTask).timer.schedule(TimerTask,delay,interval time)第一个参数是需要执行的任务.此类的类型为java.util.TimerTask.第二个参数是执行任务前等待时间,第三个参数是间隔时间(单位为毫秒) package timer; import java.util.concur

java多线程基本概念与简单实用

概述 程序:Program,是一个静态的概念 进程:Process,是一个动态的概念 进程是程序的一次动态执行过程, 占用特定的地址空间.每个进程都是独立的,由3部分组成cpu,data,code 缺点:内存的浪费,cpu的负担 线程:Thread,是进程中一个"单一的连续控制流程"  (a single sequential flow ofcontrol)/执行路径.线程又被称为轻量级进程(lightweight process). 一个进程可拥有多个并行的(concurrent)线

JAVA多线程读写文件范例

在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位作者写的基础上做了改良,但已不记得原文的地址.如果有知情者,烦请帖出地址,我在此文上加入引用或转载. 本程序是基于这么一种考虑,某系统后台有个将近2G大小的日志文件,你用任何编辑器去打开它,都将会很困难.针对这样的大文件解析处理,解决方案是使用多个线程,分割读取指定的大文件.获取我们所需要的信息.不多说,上代码了,有注释可以帮助理解. Java代码   package com.thre

Java多线程编程要点

Java多线程编程要点 认识Thread和Runnable Java中 实现多线程有两种途径:继承Thread类或者实现Runnable接口.Runnable是接口,建议用接口的方式生成线程,因为接口可以实现多继承, 况且Runnable只有一个run方法,很适合继承.在使用Thread的时候只需继承Thread,并且new一个实例出来,调用 start()方法即可以启动一个线程. Thread Test = new Thread(); Test.start(); 在使用Runnable的时候需

java多线程核心技术梳理(附源码)

java多线程核心技术梳理(附源码) java多线程核心技术梳理附源码 写在前面 java多线程 对象及变量的并发访问 线程间通信 Lock的使用 定时器 单例模式与多线程 拾遗补增 参考资料 本文对多线程基础知识进行梳理,主要包括多线程的基本使用,对象及变量的并发访问,线程间通信,lock的使用,定时器,单例模式,以及线程状态与线程组. 写在前面 花了一周时间阅读<java多线程编程核心技术>(高洪岩 著),本文算是此书的整理归纳,书中几乎所有示例,我都亲手敲了一遍,并上传到了我的githu

《Java 多线程编程核心技术》- 笔记

作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大量的请求进来,按理说,我们应该考虑并发问题.但其实,spring接到请求,分配到controller之后,就已经是线程安全的了,所以我们要做的就是,从controller开始,到最后请求响应结束,保证线程安全即可. 多线程好像有很多东西需要注意,阅读<Java 多线程编程核心技术>后,做个总结,总

java多线程编程从入门到卓越(超详细总结)

导读:java多线程编程不太熟?或是听说过?或是想复习一下?找不到好的文章?别担心我给你们又安利一波,文章内容很全,并且考虑到很多开发中遇到的问题和解决方案.循环渐进,通俗易懂,文章较长,建议收藏再看! 往期精彩放送:一文搞定Java的输入输出流等常见流 一文搞定Java集合类,你还在为Java集合类而烦恼吗? 文章目录 1.多线程的概念 2.多线程并发 3.多线程程序设计 继承Thread类创建线程 新建类实现Runnable接口创建线程 改进(匿名内部类方式) 获取线程的名字和当前线程对象