43 lines
1.0 KiB
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());
|
|
}
|
|
}
|