answerBi-backend/src/main/java/top/peng/answerbi/utils/SpinBlockStrategy.java

43 lines
1.0 KiB
Java

/*
* @(#)SpinBlockStrategy.java
*
* Copyright © 2023 YunPeng Corporation.
*/
package top.peng.answerbi.utils;
import com.github.rholder.retry.BlockStrategy;
import java.time.Duration;
import java.time.LocalDateTime;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* SpinBlockStrategy 自旋锁的实现, 不响应线程中断
*
* @author yunpeng
* @version 1.0 2023/7/31
*/
@Slf4j
@NoArgsConstructor
public class SpinBlockStrategy implements BlockStrategy {
@Override
public void block(long sleepTime) {
LocalDateTime startTime = LocalDateTime.now();
long start = System.currentTimeMillis();
long end = start;
log.info("[SpinBlockStrategy]...begin wait.");
while (end - start <= sleepTime) {
end = System.currentTimeMillis();
}
//使用Java8新增的Duration计算时间间隔
Duration duration = Duration.between(startTime, LocalDateTime.now());
log.info("[SpinBlockStrategy]...end wait.duration={}", duration.toMillis());
}
}