首页 > 其他分享 >守护线程ScheduledThreadPoolExecutor中两个方法的区别demo

守护线程ScheduledThreadPoolExecutor中两个方法的区别demo

时间:2023-01-08 21:45:59浏览次数:45  
标签:lock java demo ScheduledThreadPoolExecutor util 线程 import new

package com.pzistart.msgdemoimpl.renlock;

import jdk.nashorn.internal.ir.Block;

import javax.annotation.security.RunAs;
import javax.sound.sampled.FloatControl;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author Pzi
 * @create 2023-01-07 20:56
 */
public class Demo2 {

    private static ReentrantLock lock = new ReentrantLock();

    public static void main(String[] args) {

        // 创建一个守护线程
        ScheduledExecutorService daemonExecutor = new ScheduledThreadPoolExecutor(1);
        // 上一个线程执行完毕后,延迟 5s 后再创建一个任务
        // 这里要等上一个执行完毕后,才开始延迟开启下一个任务
        // daemonExecutor.scheduleWithFixedDelay(new Detail(), 2, 5, TimeUnit.SECONDS);

        // 开启一个 Runable 任务后,如果在 period 时间内此任务执行完了,就会在到达 period 时间马上开启下一个 任务,否则要等上一个任务执行完毕
        // 这个方法是只要开启了一个 任务,那么 period 也就同步计时
        daemonExecutor.scheduleAtFixedRate(new Detail(), 2, 5, TimeUnit.SECONDS);

    }

    // 创建一个解析详情线程
    static class Detail implements Runnable {

        @Override
        public void run() {
            try {
                lock.lock();
                System.out.println(Thread.currentThread().getName() + " 上锁");
                Thread.sleep(6000);
                System.out.println(Thread.currentThread().getName() + " 释放锁");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
    }


}

标签:lock,java,demo,ScheduledThreadPoolExecutor,util,线程,import,new
From: https://www.cnblogs.com/pzistart/p/17035452.html

相关文章

  • 工作总结之线程池和原子类篇
    目录工作总结之线程池和原子类篇前言解决思路具体实现代码期间遇到的问题有待优化的地方工作总结之线程池和原子类篇前言起因是,项目里面的同步代码的执行时间过久(20小......
  • OpenHarmony开发05 —— 操作系统实验之线程
    OpenHarmony开发05——操作系统实验之线程[实验指导文档](OpenHarmony/vendor_hisilicon-Gitee.com)首先将代码thread_demo/00_thread拷贝到程序目录下参照指导......
  • 多线程
    多线程一、创建方式:1.继承Thread类(重点)2.实现Runnable接口(重点)3.实现Callable接口(了解)二、.Lamda表达式1.简洁代码2.避免匿名内部类定义过多3.关键:函数式接口:一个接口只包......
  • java并发编程_线程
    创建进程方式1,start一个新的线程,启动线程后回调newRunnable中的run方法,run方法调用结束后,JVM等待回收线程。publicclassFutureTaskOne{publicstaticvoidmai......
  • spring boot——请求与参数校验——request请求与转发——request. getRequestDispatc
                                   @RequestMapping(value="/test5")//请求......
  • 使用ThreadPoolExecutor and schedule进行创建线程池(多线程-定时任务-数据同步-任务队
    使用ThreadPoolExecutorandschedule进行创建线程池(多线程-定时任务-数据同步-任务队列)#使用ThreadPoolExecutorandschedule进行创建线程池(多线程-定时任务-数据同步-......
  • java多线程知识点总结
    一、线程的三种创建方法1-1继承Thread继承thread方法然后重写run方法,在用start开启线程。代码实现:Threadt=newThread(){@Overridepu......
  • C++ - 多线程
    1.多线程传统的C++(C++11之前)中并没有引入线程这个概念,在C++11出来之前,如果我们想要在C++中实现多线程,需要借助操作系统平台提供的API,比如Linux的<pthread.h>,或者windows下......
  • 多线程的事务回滚问题
    多线程的事务回滚问题环境要求1.mybatis-plus或mybatis2.支持单表的增删改查3.书写工具类将集合平分,获取线程池importjava.util.ArrayList;importjava.util.List;......
  • QT线程间发送结构体
     QT的信号和槽机制能十分方便的用来传输数据,但是如果数据种类比较多,分类比较多的时候,就需要更好地更高效的来传递数据的方法。以结构体作为参数是个很不错的选择。这几天......