Package org.aoju.bus.core.toolkit
Class ThreadKit
java.lang.Object
org.aoju.bus.core.toolkit.ThreadKit
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic ReentrantReadWriteLockcreateReadWriteLock(boolean fair) static ScheduledThreadPoolExecutorcreateScheduledExecutor(int corePoolSize) static StampedLock创建StampedLock锁static ThreadFactorycreateThreadFactory(String threadNamePrefix) 创建自定义线程名称前缀的ThreadFactorystatic ThreadBuilder创建ThreadFactoryBuilderstatic <T> ThreadLocal<T> createThreadLocal(boolean isInheritable) 创建本地线程对象static <T> ThreadLocal<T> createThreadLocal(Supplier<? extends T> supplier) 创建本地线程对象static Runnable执行异步方法static Future<?> 执行有返回值的异步方法 Future代表一个异步执行的操作,通过get()方法可以获得操作的结果,如果异步操作还没有完成,则,get()会使当前线程阻塞static Runnable执行异步方法static <T> Future<T> 执行有返回值的异步方法 Future代表一个异步执行的操作,通过get()方法可以获得操作的结果,如果异步操作还没有完成,则,get()会使当前线程阻塞static void直接在公共线程池中执行线程static Thread获取进程的主线程static AtomicNoLock获取单例的无锁对象static StackTraceElement[]static StackTraceElementgetStackTraceElement(int i) 获得堆栈项static Thread[]获取JVM中与当前线程同组的所有线程static Thread[]getThreads(ThreadGroup group) 获取JVM中与当前线程同组的所有线程 使用数组二次拷贝方式,防止在线程列表获取过程中线程终止 from Voovanstatic void结束线程,调用此方法后,线程将抛出InterruptedException异常static <T> CompletionService<T> 新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果 若未完成,则会阻塞static <T> CompletionService<T> newCompletionService(ExecutorService executor) 新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果 若未完成,则会阻塞static CountDownLatchnewCountDownLatch(int threadCount) 新建一个CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待static ExecutorService获得一个新的线程池static ExecutorServicenewExecutor(int corePoolSize) 新建一个线程池static ThreadPoolExecutornewExecutor(int corePoolSize, int maximumPoolSize) 获得一个新的线程池 如果maximumPoolSize >= corePoolSize,在没有新任务加入的情况下,多出的线程将最多保留60sstatic ExecutorServicenewExecutor(int corePoolSize, int maximumPoolSize, int maximumQueueSize) 获得一个新的线程池,并指定最大任务队列大小 如果maximumPoolSize >= corePoolSize,在没有新任务加入的情况下,多出的线程将最多保留60sstatic ThreadPoolExecutornewExecutorByBlockingCoefficient(float blockingCoefficient) 获得一个新的线程池 传入阻塞系数,线程池的大小计算公式为:CPU可用核心数 / (1 - 阻塞因子) Blocking Coefficient(阻塞系数) = 阻塞时间/(阻塞时间+使用CPU的时间) 计算密集型任务的阻塞系数为0,而IO密集型任务的阻塞系数则接近于1static ExecutorServicenewFixedExecutor(int nThreads, int maximumQueueSize, String threadNamePrefix, boolean isBlocked) 获取一个新的线程池,默认的策略如下static ExecutorServicenewFixedExecutor(int nThreads, int maximumQueueSize, String threadNamePrefix, RejectedExecutionHandler handler) 获得一个新的线程池,默认策略如下static ExecutorServicenewFixedExecutor(int nThreads, String threadNamePrefix, boolean isBlocked) 获取一个新的线程池,默认的策略如下static ThreadFactorynewNamedThreadFactory(String prefix, boolean isDaemon) 创建线程工厂static ThreadFactorynewNamedThreadFactory(String prefix, ThreadGroup threadGroup, boolean isDaemon) 创建线程工厂static ThreadFactorynewNamedThreadFactory(String prefix, ThreadGroup threadGroup, boolean isDaemon, Thread.UncaughtExceptionHandler handler) 创建线程工厂static ExecutorService获得一个新的线程池,只有单个线程static Thread创建新线程,非守护线程,正常优先级,线程组与当前线程的线程组一致static Thread创建新线程static booleansafeSleep(long millis) 考虑Thread.sleep(long)方法有可能时间不足给定毫秒数,此方法保证sleep时间不小于给定的毫秒数static boolean考虑Thread.sleep(long)方法有可能时间不足给定毫秒数,此方法保证sleep时间不小于给定的毫秒数static ScheduledThreadPoolExecutorschedule(ScheduledThreadPoolExecutor executor, Runnable command, long initialDelay, long period, boolean fixedRateOrFixedDelay) 开始执行一个定时任务,执行方式分fixedRate模式和fixedDelay模式 注意:此方法的延迟和周期的单位均为毫秒 fixedRate 模式:下一次任务等待上一次任务执行完毕后再启动 fixedDelay模式:下一次任务不等待上一次任务,到周期自动执行static ScheduledThreadPoolExecutorschedule(ScheduledThreadPoolExecutor executor, Runnable command, long initialDelay, long period, TimeUnit timeUnit, boolean fixedRateOrFixedDelay) 开始执行一个定时任务,执行方式分fixedRate模式和fixedDelay模式 fixedRate 模式:下一次任务等待上一次任务执行完毕后再启动 fixedDelay模式:下一次任务不等待上一次任务,到周期自动执行static booleansleep(long millis) 挂起当前线程static boolean挂起当前线程static boolean挂起当前线程static void阻塞当前线程,保证在main方法中执行不被退出static voidwaitFor()等待当前线程结束.static void等待线程结束.
-
Constructor Details
-
ThreadKit
public ThreadKit()
-
-
Method Details
-
newExecutor
新建一个线程池1. 初始线程数为corePoolSize指定的大小 2. 没有最大线程数限制 3. 默认使用LinkedBlockingQueue,默认队列大小为1024- Parameters:
corePoolSize- 同时执行的线程数大小- Returns:
- ExecutorService
-
newExecutor
获得一个新的线程池1. 初始线程数为 0 2. 最大线程数为Integer.MAX_VALUE 3. 使用SynchronousQueue 4. 任务直接提交给线程而不保持它们- Returns:
- ExecutorService
-
newExecutor
获得一个新的线程池 如果maximumPoolSize >= corePoolSize,在没有新任务加入的情况下,多出的线程将最多保留60s- Parameters:
corePoolSize- 初始线程池大小maximumPoolSize- 最大线程池大小- Returns:
ThreadPoolExecutor
-
newExecutor
public static ExecutorService newExecutor(int corePoolSize, int maximumPoolSize, int maximumQueueSize) 获得一个新的线程池,并指定最大任务队列大小 如果maximumPoolSize >= corePoolSize,在没有新任务加入的情况下,多出的线程将最多保留60s- Parameters:
corePoolSize- 初始线程池大小maximumPoolSize- 最大线程池大小maximumQueueSize- 最大任务队列大小- Returns:
ThreadPoolExecutor
-
newSingleExecutor
获得一个新的线程池,只有单个线程1. 初始线程数为 1 2. 最大线程数为 1 3. 默认使用LinkedBlockingQueue,默认队列大小为1024 4. 同时只允许一个线程工作,剩余放入队列等待,等待数超过1024报错- Returns:
- ExecutorService
-
newExecutorByBlockingCoefficient
获得一个新的线程池 传入阻塞系数,线程池的大小计算公式为:CPU可用核心数 / (1 - 阻塞因子) Blocking Coefficient(阻塞系数) = 阻塞时间/(阻塞时间+使用CPU的时间) 计算密集型任务的阻塞系数为0,而IO密集型任务的阻塞系数则接近于1see: http://blog.csdn.net/partner4java/article/details/9417663
- Parameters:
blockingCoefficient- 阻塞系数,阻塞因子介于0~1之间的数,阻塞因子越大,线程池中的线程数越多- Returns:
ThreadPoolExecutor
-
newFixedExecutor
public static ExecutorService newFixedExecutor(int nThreads, String threadNamePrefix, boolean isBlocked) 获取一个新的线程池,默认的策略如下1. 核心线程数与最大线程数为nThreads指定的大小 2. 默认使用LinkedBlockingQueue,默认队列大小为1024 3. 如果isBlocked为{code true},当执行拒绝策略的时候会处于阻塞状态,直到能添加到队列中或者被Thread.interrupt()中断- Parameters:
nThreads- 线程池大小threadNamePrefix- 线程名称前缀isBlocked- 是否使用BlockPolicy策略- Returns:
ExecutorService
-
newFixedExecutor
public static ExecutorService newFixedExecutor(int nThreads, int maximumQueueSize, String threadNamePrefix, boolean isBlocked) 获取一个新的线程池,默认的策略如下1. 核心线程数与最大线程数为nThreads指定的大小 2. 默认使用LinkedBlockingQueue3. 如果isBlocked为{code true},当执行拒绝策略的时候会处于阻塞状态,直到能添加到队列中或者被Thread.interrupt()中断- Parameters:
nThreads- 线程池大小maximumQueueSize- 队列大小threadNamePrefix- 线程名称前缀isBlocked- 是否使用BlockPolicy策略- Returns:
ExecutorService
-
newFixedExecutor
public static ExecutorService newFixedExecutor(int nThreads, int maximumQueueSize, String threadNamePrefix, RejectedExecutionHandler handler) 获得一个新的线程池,默认策略如下1. 核心线程数与最大线程数为nThreads指定的大小 2. 默认使用LinkedBlockingQueue- Parameters:
nThreads- 线程池大小maximumQueueSize- 队列大小threadNamePrefix- 线程名称前缀handler- 拒绝策略- Returns:
ExecutorService
-
execute
-
excAsync
-
execAsync
-
execAsync
-
execAsync
-
newCompletionService
新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果 若未完成,则会阻塞- Type Parameters:
T- 回调对象类型- Returns:
- CompletionService
-
newCompletionService
新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果 若未完成,则会阻塞- Type Parameters:
T- 回调对象类型- Parameters:
executor- 执行器ExecutorService- Returns:
- CompletionService
-
newCountDownLatch
新建一个CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待- Parameters:
threadCount- 线程数量- Returns:
- CountDownLatch
-
newThread
-
newThread
-
sleep
-
sleep
挂起当前线程- Parameters:
millis- 挂起的毫秒数- Returns:
- 被中断返回false,否则true
-
sleep
public static boolean sleep(long millis) 挂起当前线程- Parameters:
millis- 挂起的毫秒数- Returns:
- 被中断返回false,否则true
-
safeSleep
考虑Thread.sleep(long)方法有可能时间不足给定毫秒数,此方法保证sleep时间不小于给定的毫秒数- Parameters:
millis- 给定的sleep时间- Returns:
- 被中断返回false, 否则true
- See Also:
-
safeSleep
public static boolean safeSleep(long millis) 考虑Thread.sleep(long)方法有可能时间不足给定毫秒数,此方法保证sleep时间不小于给定的毫秒数- Parameters:
millis- 给定的sleep时间- Returns:
- 被中断返回false,否则true
- See Also:
-
getStackTrace
- Returns:
- 获得堆栈列表
-
getStackTraceElement
获得堆栈项- Parameters:
i- 第几个堆栈项- Returns:
- 堆栈项
-
createThreadLocal
创建本地线程对象- Type Parameters:
T- 持有对象类型- Parameters:
isInheritable- 是否为子线程提供从父线程那里继承的值- Returns:
- 本地线程
-
createThreadLocal
创建本地线程对象- Type Parameters:
T- 持有对象类型- Parameters:
supplier- 初始化线程对象函数- Returns:
- 本地线程
- See Also:
-
createThreadFactoryBuilder
创建ThreadFactoryBuilder- Returns:
- ThreadFactoryBuilder
- See Also:
-
createThreadFactory
创建自定义线程名称前缀的ThreadFactory- Parameters:
threadNamePrefix- 线程名称前缀- Returns:
ThreadFactory- See Also:
-
interrupt
结束线程,调用此方法后,线程将抛出InterruptedException异常- Parameters:
thread- 线程isJoin- 是否等待结束
-
waitFor
public static void waitFor()等待当前线程结束. 调用Thread.join()并忽略InterruptedException -
waitFor
等待线程结束. 调用Thread.join()并忽略InterruptedException- Parameters:
thread- 线程
-
getThreads
-
getThreads
获取JVM中与当前线程同组的所有线程 使用数组二次拷贝方式,防止在线程列表获取过程中线程终止 from Voovan- Parameters:
group- 线程组- Returns:
- 线程对象数组
-
getMainThread
-
newNamedThreadFactory
创建线程工厂- Parameters:
prefix- 线程名前缀isDaemon- 是否守护线程- Returns:
- the object
-
newNamedThreadFactory
public static ThreadFactory newNamedThreadFactory(String prefix, ThreadGroup threadGroup, boolean isDaemon) 创建线程工厂- Parameters:
prefix- 线程名前缀threadGroup- 线程组,可以为nullisDaemon- 是否守护线程- Returns:
- the object
-
newNamedThreadFactory
public static ThreadFactory newNamedThreadFactory(String prefix, ThreadGroup threadGroup, boolean isDaemon, Thread.UncaughtExceptionHandler handler) 创建线程工厂- Parameters:
prefix- 线程名前缀threadGroup- 线程组,可以为nullisDaemon- 是否守护线程handler- 未捕获异常处理- Returns:
- the object
-
sync
-
createScheduledExecutor
- Parameters:
corePoolSize- 初始线程池大小- Returns:
ScheduledThreadPoolExecutor
-
schedule
public static ScheduledThreadPoolExecutor schedule(ScheduledThreadPoolExecutor executor, Runnable command, long initialDelay, long period, boolean fixedRateOrFixedDelay) 开始执行一个定时任务,执行方式分fixedRate模式和fixedDelay模式 注意:此方法的延迟和周期的单位均为毫秒- fixedRate 模式:下一次任务等待上一次任务执行完毕后再启动
- fixedDelay模式:下一次任务不等待上一次任务,到周期自动执行
- Parameters:
executor- 定时任务线程池,null新建一个默认线程池command- 需要定时执行的逻辑initialDelay- 初始延迟,单位毫秒period- 执行周期,单位毫秒fixedRateOrFixedDelay-true表示fixedRate模式,false表示fixedDelay模式- Returns:
ScheduledThreadPoolExecutor
-
schedule
public static ScheduledThreadPoolExecutor schedule(ScheduledThreadPoolExecutor executor, Runnable command, long initialDelay, long period, TimeUnit timeUnit, boolean fixedRateOrFixedDelay) 开始执行一个定时任务,执行方式分fixedRate模式和fixedDelay模式- fixedRate 模式:下一次任务等待上一次任务执行完毕后再启动
- fixedDelay模式:下一次任务不等待上一次任务,到周期自动执行
- Parameters:
executor- 定时任务线程池,null新建一个默认线程池command- 需要定时执行的逻辑initialDelay- 初始延迟period- 执行周期timeUnit- 时间单位fixedRateOrFixedDelay-true表示fixedRate模式,false表示fixedDelay模式- Returns:
ScheduledThreadPoolExecutor
-
createStampLock
-
createReadWriteLock
- Parameters:
fair- 是否公平锁- Returns:
ReentrantReadWriteLock锁
-
getNoLock
-