java.util.concurrent.TimeUnit 这个类,相信童鞋们都不陌生。它是一个enum: public enum TimeUnit 好吧,我一直把它当做一个枚举类来用。 偶然看到还有别的用法,大吃一斤,原来 TimeUnit 并不是一个简单的枚举类。 时间单位换算 //小时转换为秒 long sec = TimeUnit.HOURS.toSeconds(1); // 另一种形式 long sec = TimeUnit.SECONDS.convert (1, TimeUnit.HOURS); sleep() 比如,当前线程休眠5秒,传统的方式如下: Thread.sleep(5000); 用TimeUnit看起来是这样的: TimeUnit.SECONDS.sleep 得掰着手指头 —— 看半天,用TimeUnit就清晰多了。 TimeUnit.DAYS.sleep(1);
一、背景 今天无意间看到了java.util.concurrent.TimeUnit枚举类。 想通过这个类谈谈枚举,以及编程规范问题。 二、源码 源码: package java.util.concurrent; /** * A {@code TimeUnit} represents time durations at a given * * A {@code TimeUnit} is mainly used to inform time-based methods * how a given timing parameter * * @since 1.5 * @author Doug Lea */ public enum TimeUnit { /** * Time unit representing 另外我们通过源码可以看到,为什么TimeUnit.SECONDS.sleep(10);可以让当前线程暂停10秒呢?
2.ReentrantLock提供的获取锁的方式 ReentrantLock提供了lock()、tryLock()、tryLock(long timeout, TimeUnit unit)、lock.lockInterruptibly 但是如果就是想使用公平的方式的话,可以试一试tryLock(0, TimeUnit.SECONDS),几乎跟公平锁没区别,只是会监测中断事件。 3)tryLock(long timeout, TimeUnit unit) public boolean tryLock(long timeout, TimeUnit unit) 但是tryLock(long,TimeUnit)在等待超时之后可以结束等待。 TryLockInterrupt-Thread lockTest----current thread release the lock: Lock-Thread 同时,tryLock(long, TimeUnit
scheduler.advanceTimeTo(10, TimeUnit.MILLISECONDS); 时钟移动到20毫秒。 scheduler.advanceTimeBy(20, TimeUnit.MILLISECONDS); 下面的列子展示了0秒、20秒、40秒会打印不同的结果。 : " + scheduler.now(TimeUnit.MILLISECONDS)); scheduler.advanceTimeTo(20, TimeUnit.SECONDS); (40, TimeUnit.SECONDS); System.out.println("virtual time: " + scheduler.now(TimeUnit.SECONDS) time:" + scheduler.now(TimeUnit.SECONDS)); scheduler.advanceTimeBy(2, TimeUnit.SECONDS);
maxIdleTimeUnit : TimeUnit.SECONDS, maxIdleTime, maxIdleTimeUnit); } public timeUnit) throws InterruptedException { thread.join((timeUnit ! timeUnit : TimeUnit.MILLISECONDS).toMillis(time)); } static class DefaultThreadFactory implements * @param timeUnit time unit. */ public void closeIdle(final long idletime, final TimeUnit timeUnit) { Args.notNull(timeUnit, "Time unit"); long time = timeUnit.toMillis(idletime
final Observable<T> skipLast(int count) public final Observable<T> skipLast(long time, TimeUnit unit <T> skipLast(long time, TimeUnit unit, Scheduler scheduler) public final Observable<T> skipLast(long unit) public final Observable<T> take(long time, TimeUnit unit, Scheduler scheduler) // 反方向 public unit) public final Observable<T> takeLast(long time, TimeUnit unit, boolean delayError) public final (1, 20, 0,100, TimeUnit.MILLISECONDS) .sample(300, TimeUnit.MILLISECONDS).subscribe
timeUnit); default void put(K key, V value, long expireAfterWrite, TimeUnit timeUnit) { ); } CacheResult PUT(K key, V value, long expireAfterWrite, TimeUnit timeUnit); default extends V> map, long expireAfterWrite, TimeUnit timeUnit) { PUT_ALL(map, expireAfterWrite, timeUnit extends V> map, long expireAfterWrite, TimeUnit timeUnit) { long t = System.currentTimeMillis timeUnit) { CacheValueHolder<V> cacheObject = new CacheValueHolder(value ,timeUnit.toMillis(
timeUnit); default void put(K key, V value, long expireAfterWrite, TimeUnit timeUnit) { PUT ); } CacheResult PUT(K key, V value, long expireAfterWrite, TimeUnit timeUnit); default void extends V> map, long expireAfterWrite, TimeUnit timeUnit) { PUT_ALL(map, expireAfterWrite, timeUnit extends V> map, long expireAfterWrite, TimeUnit timeUnit); CacheResult REMOVE(K key); CacheResult extends V> map, long expireAfterWrite, TimeUnit timeUnit) { long t = System.currentTimeMillis(
maxIdleTimeUnit : TimeUnit.SECONDS, maxIdleTime, maxIdleTimeUnit); } public void timeUnit) throws InterruptedException { thread.join((timeUnit ! timeUnit : TimeUnit.MILLISECONDS).toMillis(time)); } static class DefaultThreadFactory implements * @param timeUnit time unit. */ public void closeIdle(final long idletime, final TimeUnit timeUnit) { Args.notNull(timeUnit, "Time unit"); long time = timeUnit.toMillis(idletime
OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(30, TimeUnit.SECONDS ) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30,TimeUnit.SECONDS OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(30, TimeUnit.SECONDS ) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30,TimeUnit.SECONDS ) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30,TimeUnit.SECONDS
= TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Test = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS (iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS
timeUnit) throws KaToolException { if (ObjectUtil.isEmpty(obj)){ )){ timeUnit=lockConfig.getTimeUnit(); } //线程被锁住了 ); log.info("katool=> LockUntil => DistributedLock:{} value:{} extime:{} timeUnit:{}" finalTimeUnit = timeUnit; Long finalExptime = exptime; ); log.info("katool=> LockUntil => delayDistributedLock:{} value:{} extime:{} timeUnit
stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), RedisConstants.CACHE_SHOP_TTL, TimeUnit.MINUTES timeUnit){ stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(value), time, timeUnit } /** * 逻辑过期时间 * @param key * @param value * @param time * @param timeUnit */ public void setWithLogicalExpire(String key, Object value, Long time, TimeUnit timeUnit) ); return null; } //写入缓存 设置超时时间为30min this.set(key, r, time, timeUnit
unit); long getCheckTimeNanoSeconds(); CriticalAnalyzer setTimeout(long timeout, TimeUnit unit ); long getTimeout(TimeUnit unit); long getTimeoutNanoSeconds(); CriticalAnalyzer addAction unit) { return this; } @Override public long getTimeout(TimeUnit unit) { return unit) { if (timeoutNanoSeconds == 0) { timeoutNanoSeconds = TimeUnit.MINUTES.toNanos( 2); } return unit.convert(timeoutNanoSeconds, TimeUnit.NANOSECONDS); } @Override
timeUnit, long time); /** * 上锁 * @param lockName 锁名称 * @param lockValue 锁值 * @param timeUnit 时间单位 * @param time 时间 */ void lock(String lockName, String lockValue, TimeUnit timeUnit, long time); /** * 线程解锁 * @param lockName 即将解锁的锁名称 */ void timeUnit, long time) { Jedis jedis = pool.getResource timeUnit, long time) { if (tryLock(lockName,lockValue,timeUnit,time)) { return;
Timer:
using System;
using UnityEngine;
///
timeUnit) { logger.info("Redis写入数据 key:{} val:{} timeout:{} timeUnit:{}", key, value, timeout timeUnit) { logger.info("IIR写入数据 key:{} val:{} timeout:{} timeUnit:{}", key, value, timeout, timeUnit) { logger.info("EGM写入数据 key:{} val:{} timeout:{} timeUnit:{}", key, value, timeout, timeUnit) { egm.setEx(key, value, timeout, timeUnit); } public void del(String key) timeUnit) { iir.setExpire(key, value, timeout, timeUnit); } public void del(String
timeUnit,String[] hashkey){ long id = Thread.currentThread().getId(); > submitTask(Runnable run, long delay, TimeUnit timeUnit){ ScheduledFuture<? > submitTask(Callable run, long delay, TimeUnit timeUnit){ ScheduledFuture<? > submitTask(Runnable run,long initdeay, long delay, TimeUnit timeUnit){ ScheduledFuture<? > submitTask(Callable run,long initdeay, long delay, TimeUnit timeUnit){ ScheduledFuture<?
@param bucketName 存储桶名称 * @param objectName 对象名称 * @param getUrlTime 访问文件路径时间 * @param timeUnit String getUrlByBucketNameAndObjectNameAndTime(String bucketName, String objectName, int getUrlTime, TimeUnit timeUnit); /** * 根据对象名称和桶名称删除对象 * * @param bucketName 桶名称 * @param objectName 对象名称 timeUnit) { return this.getUrl(bucketName, objectName, getUrlTime, timeUnit); } @Override timeUnit) { try { return minioClient.getPresignedObjectUrl(
JdkDemo { private static final ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(10, 100, 100, TimeUnit.SECONDS (Future<Integer> integerFuture : futures) { try { integerFuture.get(15, TimeUnit.SECONDS java.util.concurrent.Future#get(long, java.util.concurrent.TimeUnit)方法是对每个任务的超时时间设置,而不是对总任务设置超时时间。 线程池invokeAll的原理其实是动态改动了java.util.concurrent.Future#get(long, java.util.concurrent.TimeUnit)设置的超时时间,每次都会设置为 :任务截止时间减去当前时间,如下图源码所示: 正确做法:使用CompletableFuture 使用CompletableFuture.allOf(......).get(15L, TimeUnit.SECONDS