java多线程实现定时器任务

Posted 夜空中最亮的星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
}

 




以上是关于java多线程实现定时器任务的主要内容,如果未能解决你的问题,请参考以下文章

定时任务多线程的实现

SpringBoot几种定时任务的实现方式 和多线程执行任务

NodeJs多线程、多进程、定时任务

《Java多线程编程核心技术》定时器Timer的使用

《Java多线程编程核心技术》定时器Timer的使用

Spring Boot 中配置定时任务,实现多线程操作