zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    mangodb学习0.1 概念
    express 学习笔记(一)路由
    vue配置路由
    screenX, clientX, pageX
    svg的世界、视窗、视野
    window.print()打印网页(一)
    cookie基础
    BOM基础
    Java三大特征:封装 继承 多态
    面向对象
  • 原文地址:https://www.cnblogs.com/09120912zhang/p/8393692.html
Copyright © 2011-2022 走看看