首页 > 其他分享 >代替Thread.sleep的平替方法

代替Thread.sleep的平替方法

时间:2024-02-29 10:23:56浏览次数:19  
标签:平替 Thread period long duration sleep result supplier true

package cool.islj.thread;

import java.time.Duration;
import java.util.function.BooleanSupplier;

public class ThreadUtils {
    /**
     * 等待(supplier一开始为true则不等待)
     * @param period 检查周期,supplier一开始为false时的最低等待时间
     * @param timeOut 超时时间,最多等待时间
     * @param supplier 为true时不等待,否则等待其变为true或者超时
     * @return supplier为true返回true,否则返回false
     */
    public static boolean waitMillis(long period, long timeOut, BooleanSupplier supplier) {
        long waitTime = 0L;
        Duration duration = null;

        boolean result;
        do {
            long beginTime = System.currentTimeMillis();
            result = supplier != null && supplier.getAsBoolean();
            waitTime += System.currentTimeMillis() - beginTime;
            if (!result) {
                try {
                    Thread.yield();
                    if (duration == null) {
                        duration = Duration.ofMillis(timeOut);
                    }
                    synchronized (duration) {
                        duration.wait(period);
                    }
                    waitTime += period;
                } catch (InterruptedException ex) {
                    // 这里用log打印出来
                    ex.printStackTrace();
                }
            }
        } while (!result && waitTime < timeOut && !Thread.currentThread().isInterrupted());
        return result;
    }
}

标签:平替,Thread,period,long,duration,sleep,result,supplier,true
From: https://www.cnblogs.com/liu-im/p/18042809

相关文章

  • Sleep Data
      1.在PyTorch中,iter的主要作用是什么?1、解释说明在PyTorch中,iter()函数的主要作用是创建一个迭代器对象,用于遍历数据集。通过使用iter()函数,我们可以方便地访问和处理数据集中的数据。这对于机器学习和深度学习任务中的数据处理和模型训练非常有用。2、使用示例```pyt......
  • pthread与tbb中各种锁的对比测试
     pthread中提供的锁有:pthread_mutex_t,pthread_spinlock_t,pthread_rwlock_t。   pthread_mutex_t是互斥锁,同一瞬间只能有一个线程能够获取锁,其他线程在等待获取锁的时候会进入休眠状态。因此pthread_mutex_t消耗的CPU资源很小,但是性能不高,因为会引起线程切换。   pthr......
  • P7154 Sleeping Cows 题解
    传送门题意:给定两个数组\(a_i,b_i\),若\(a_i\leb_j\),则他俩可配对。求极大匹配的方案数。(极大不是最大,最大一定是极大)先考虑最大匹配方案数怎么求。把\(a\)和\(b\)从小到大排序。则每个\(a_i\)能匹配的\(b\)都是一段后缀,且随着\(i\)增大,这个后缀越来越小。于是从......
  • Exception in thread "xxl-job, admin JobRegistryMonitorHelper-registryOrRemoveThr
    这个问题集合遍历修改了集合结构,这样是不被允许的,需要换种方式报错示意图 第一可以采用for(inti=0;i<registryList.size();i++)解决第二采用迭代处理Iterator<XxlJobRegistry>iterator=registryList.iterator();while(iterator.hasNext()){XxlJobRegist......
  • ThreadLocal
    1.用来存储数据:set()/get()2.使用ThreadLocal存储的数据,线程安全3.用完调用remove方法释放(否则可能发生内存泄漏)`/**ThreadLocal工具类*/@SuppressWarnings("all")publicclassThreadLocalUtil{//提供ThreadLocal对象,privatestaticfinalThreadLocalTHREAD_LOCA......
  • C# 理解Thread.Sleep()方法
    C#理解Thread.Sleep()方法转载:https://www.cnblogs.com/nzbbody/archive/2012/03/06/2381359.html我们可能经常会用到Thread.Sleep函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:1、假设现在是2008-4-712:00:00.000,如果我调用一下......
  • 浅析ThreadLocal源码
    privatevoidset(ThreadLocal<?>key,Objectvalue){//Wedon'tuseafastpathaswithget()becauseitisat//leastascommontouseset()tocreatenewentriesas//itistoreplaceexistingones,inwhichcase,afast/......
  • ThreadLocal
    前置知识Java中有些引用类型?Java中主要有4种引用类型,分别是:强、软、弱、虚。他们主要跟Java的垃圾回收机制有关强引用:Java中默认的引用类型,一个对象如果具有强引用,那么只要这种引用还存在就不会被回收软引用:在内存充足时,是不会GC这个对象的。只有在JVM内存不足的时候才会调用......
  • 3D Slicer编译错误,无法打开包括文件: “pthread.h”解决
    3DSlicer编译错误:fatalerrorC1083:无法打开包括文件:“pthread.h”:Nosuchfileordirectory解决方案:安装pthread库 1、下载pthread库pthreads-w32-2-9-1-release.zip地址:https://sourceforge.net/projects/pthreads4w/2、解压zip解压后,您应该能看到几个文件夹,......
  • 多线程系列(七) -ThreadLocal 用法及内存泄露分析
    一、简介在Javaweb项目中,想必很多的同学对ThreadLocal这个类并不陌生,它最常用的应用场景就是用来做对象的跨层传递,避免多次传递,打破层次之间的约束。比如下面这个HttpServletRequest参数传递的简单例子!publicclassRequestLocal{/***线程本地变量*/......