zoukankan      html  css  js  c++  java
  • Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)

     1 package com.thread.test.thread;
     2 import java.util.Timer;
     3 import java.util.TimerTask;
     4 import java.util.concurrent.*;
     5 import java.util.concurrent.locks.ReentrantLock;
     6 
     7 /**
     8  * schedule(Runnable command, long delay, TimeUnit unit)
     9  * @ command: 需要执行的任务
    10  * @ delay:任务执行需要延迟的时间
    11  * @ unit:时间单位
    12  *
    13  * 一次性执行任务,执行完成结束
    14  *
    15  * ScheduledExecutorService:
    16  * scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
    17  * @ Runnable command: 需要执行的任务
    18  * @ long initialDelay:第一次执行延迟的时间
    19  * @ long period:间隔周期
    20  * @ TimeUnit unit
    21  *
    22  * 包含首次延迟的周期性执行任务,第一次执行:delay+period,第二次:delay+2*period,以此类推...
    23  * 停止:异常停止执行,主动调用停止方法
    24  * 如果某一个周期执行时间超过设定的period,则后续顺延
    25  *
    26  * scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
    27  * @ command: 需要执行的任务
    28  * @ initialDelay:第一次执行延迟的时间
    29  * @ delay:周期之间的延迟,间隔
    30  * @ unit:前两个参数的单位
    31  *
    32  * 周期性执行任务:第一次执行:initialDelay+delay,第二次:initialDelay+2*delay,以此类推...
    33  * 停止:异常停止执行,主动调用停止方法
    34  * 不顺延
    35  *
    36  * Created by windwant on 2016/5/26.
    37  */
    38 public class MyExecutor {
    39     public static void main(String[] args) {
    40         testTimer();
    41     }
    42 
    43     public static void testTimer(){
    44         new Timer().schedule(new MyTimerTask(), 2000, 5000);
    45     }
    46 
    47     public static void testExecutors(){
    48         MyERunnable mer = new MyERunnable(5);
    49 //        ExecutorService es = Executors.newCachedThreadPool();
    50 //        ExecutorService es = Executors.newFixedThreadPool(2);
    51         ScheduledExecutorService es = Executors.newScheduledThreadPool(2);
    52         es.schedule(mer, 10000, TimeUnit.SECONDS.MILLISECONDS);
    53         es.scheduleAtFixedRate(mer, 2, 10, TimeUnit.SECONDS);
    54         es.scheduleWithFixedDelay(mer, 1, 5, TimeUnit.SECONDS);
    55         es.shutdown();
    56     }
    57 }
    58 
    59 class MyERunnable implements Runnable{
    60     private int num = 0;
    61     MyERunnable(int num){
    62         this.num = num;
    63     }
    64     public void run() {
    65         ReentrantLock lock = new ReentrantLock();
    66         try{
    67             lock.lock();
    68             for (int i = 0; i < num; i++) {
    69                 System.out.println("current thread: " + Thread.currentThread().getName() + " num--" + i);
    70                 Thread.sleep(1000);
    71             }
    72         }catch (Exception e){
    73             e.printStackTrace();
    74         }finally {
    75             lock.unlock();
    76         }
    77     }
    78 }
    79 
    80 class MyTimerTask extends TimerTask{
    81 
    82     @Override
    83     public void run() {
    84         System.out.println("timer task");
    85     }
    86 }

    项目地址:https://github.com/windwant/windwant-demo/tree/master/thread-demo

  • 相关阅读:
    keras与卷积神经网络(CNN)实现识别mnist手写数字
    Pytorch自动求解梯度
    Kaggle竞赛入门(四):随机森林算法的Python实现
    Kaggle竞赛入门(三):用Python处理过拟合和欠拟合,得到最佳模型
    Kaggle竞赛入门(二):如何验证机器学习模型
    Kaggle竞赛入门(一):决策树算法的Python实现
    R语言入门:正态分布中dnorm(),pnorm(),qnorm(),和rnorm()函数的使用
    初识suse-Linux相关!
    关于visio 2007导入独立图库
    让windows 2003启动后直接进入桌面
  • 原文地址:https://www.cnblogs.com/niejunlei/p/5985291.html
Copyright © 2011-2022 走看看