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();
}
}
}
}