/**
* Created by 尼恩@疯狂创客圈
*/
package com.example.util;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;
public class ThreadUtil
{
/**
* CPU核数
**/
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
/**
* 定制的线程工厂
*/
private static class CustomThreadFactory implements ThreadFactory
{
//线程池数量
private static final AtomicInteger poolNumber = new AtomicInteger(1);
private final ThreadGroup group;
//线程数量
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String threadTag;
CustomThreadFactory(String threadTag)
{
SecurityManager s = System.getSecurityManager();
group = (s != null) ? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
this.threadTag = "apppool-" + poolNumber.getAndIncrement() + "-" + threadTag + "-";
}
@Override
public Thread newThread(Runnable target)
{
Thread t = new Thread(group, target,
threadTag + threadNumber.getAndIncrement(),
0);
if (t.isDaemon())
{
t.setDaemon(false);
}
if (t.getPriority() != Thread.NORM_PRIORITY)
{
t.setPriority(Thread.NORM_PRIORITY);
}
return t;
}
}
/**
* 空闲保活时限,单位秒
*/
private static final int KEEP_ALIVE_SECONDS = 30;
/**
* 有界队列size
*/
private static final int QUEUE_SIZE = 10000;
/**
* 核心线程数
*/
private static final int CORE_POOL_SIZE = 0;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT;
//懒汉式单例创建线程池:用于CPU密集型任务
private static class CpuIntenseTargetThreadPoolLazyHolder
{
//线程池: 用于CPU密集型任务
private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(
MAXIMUM_POOL_SIZE,
MAXIMUM_POOL_SIZE,
KEEP_ALIVE_SECONDS,
TimeUnit.SECONDS,
new LinkedBlockingQueue(QUEUE_SIZE),
new CustomThreadFactory("cpu"));
static
{
EXECUTOR.allowCoreThreadTimeOut(true);
//JVM关闭时的钩子函数
Runtime.getRuntime().addShutdownHook(
new ShutdownHookThread("CPU密集型任务线程池", new Callable<Void>()
{
@Override
public Void call() throws Exception
{
//优雅关闭线程池
shutdownThreadPoolGracefully(EXECUTOR);
return null;
}
}));
}
}
/**
* IO线程池最大线程数
*/
private static final int IO_MAX = Math.max(2, CPU_COUNT * 2);
/**
* IO线程池核心线程数
*/
private static final int IO_CORE = 0;
/**
* 获取执行CPU密集型任务的线程池
*
* @return
*/
public static ThreadPoolExecutor getCpuIntenseTargetThreadPool()
{
return CpuIntenseTargetThreadPoolLazyHolder.EXECUTOR;
}
//懒汉式单例创建线程池:用于IO密集型任务
private static class IoIntenseTargetThreadPoolLazyHolder
{
//线程池: 用于IO密集型任务
private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(
IO_MAX,
IO_MAX,
KEEP_ALIVE_SECONDS,
TimeUnit.SECONDS,
new LinkedBlockingQueue(QUEUE_SIZE),
new CustomThreadFactory("io"));
static
{
EXECUTOR.allowCoreThreadTimeOut(true);
//JVM关闭时的钩子函数
Runtime.getRuntime().addShutdownHook(
new ShutdownHookThread("IO密集型任务线程池", new Callable<Void>()
{
@Override
public Void call() throws Exception
{
//优雅关闭线程池
shutdownThreadPoolGracefully(EXECUTOR);
return null;
}
}));
}
}
/**
* 获取执行IO密集型任务的线程池
*
* @return
*/
public static ThreadPoolExecutor getIoIntenseTargetThreadPool()
{
return IoIntenseTargetThreadPoolLazyHolder.EXECUTOR;
}
/**
* 混合线程池
*/
private static final int MIXED_CORE = 0; //混合线程池核心线程数
private static final int MIXED_MAX = 128; //最大线程数
private static final String MIXED_THREAD_AMOUNT = "mixed.thread.amount";
//懒汉式单例创建线程池:用于混合型任务
private static class MixedTargetThreadPoolLazyHolder
{
//首先从环境变量 mixed.thread.amount 中获取预先配置的线程数
//如果没有对 mixed.thread.amount 做配置,则使用常量 MIXED_MAX 作为线程数
private static final int max = (null != System.getProperty(MIXED_THREAD_AMOUNT)) ?
Integer.parseInt(System.getProperty(MIXED_THREAD_AMOUNT)) : MIXED_MAX;
//线程池: 用于混合型任务
private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(
max,
max,
KEEP_ALIVE_SECONDS,
TimeUnit.SECONDS,
new LinkedBlockingQueue(QUEUE_SIZE),
new CustomThreadFactory("mixed"));
static
{
EXECUTOR.allowCoreThreadTimeOut(true);
//JVM关闭时的钩子函数
Runtime.getRuntime().addShutdownHook(new ShutdownHookThread("混合型任务线程池", new Callable<Void>()
{
@Override
public Void call() throws Exception
{
//优雅关闭线程池
shutdownThreadPoolGracefully(EXECUTOR);
return null;
}
}));
}
}
/**
* 获取执行混合型任务的线程池 *
*
* @return
*/
public static ThreadPoolExecutor getMixedTargetThreadPool()
{
return MixedTargetThreadPoolLazyHolder.EXECUTOR;
}
//懒汉式单例创建线程池:用于定时任务、顺序排队执行任务
static class SeqOrScheduledTargetThreadPoolLazyHolder
{
//线程池:用于定时任务、顺序排队执行任务
static final ScheduledThreadPoolExecutor EXECUTOR = new ScheduledThreadPoolExecutor(
1,
new CustomThreadFactory("seq"));
static
{
//JVM关闭时的钩子函数
Runtime.getRuntime().addShutdownHook(
new ShutdownHookThread("定时和顺序任务线程池", new Callable<Void>()
{
@Override
public Void call() throws Exception
{
//优雅关闭线程池
shutdownThreadPoolGracefully(EXECUTOR);
return null;
}
}));
}
}
/**
* 获取可调度线程池(包含提交延迟、定时、周期性、顺�
没有合适的资源?快使用搜索试试~ 我知道了~
003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁
共37个文件
java:21个
xml:6个
lua:2个
0 下载量 17 浏览量
2024-05-02
01:52:40
上传
评论
收藏 87KB RAR 举报
温馨提示
003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁
资源推荐
资源详情
资源评论
收起资源包目录
003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁.rar (37个子文件)
lock
HELP.md 860B
mvnw.cmd 7KB
pom.xml 3KB
src
test
java
com
example
demo
RedissonTest.java 8KB
RedisCommandLockTest.java 924B
RedisLockTest.java 5KB
LockApplicationTests.java 210B
main
resources
application.properties 29B
templates
script
unlock.lua 219B
lock.lua 631B
static
java
com
example
ServletInitializer.java 414B
demo
RedisLockService.java 995B
RedisCommandLock.java 4KB
InnerLock.java 3KB
RedisMultiSegmentLock.java 4KB
RedisLock.java 3KB
exception
BusinessException.java 1KB
dto
UserDTO.java 1KB
LockApplication.java 312B
lua
ScriptHolder.java 1KB
util
UUIDUtil.java 176B
ShutdownHookThread.java 1KB
ThreadUtil.java 12KB
context
SpringContextUtil.java 2KB
IOUtil.java 5KB
RandomUtil.java 902B
FormatUtil.java 598B
.mvn
wrapper
maven-wrapper.properties 233B
maven-wrapper.jar 61KB
.idea
jarRepositories.xml 874B
workspace.xml 7KB
misc.xml 656B
compiler.xml 705B
.gitignore 184B
encodings.xml 191B
mvnw 11KB
.gitignore 395B
共 37 条
- 1
资源评论
简洁冬冬
- 粉丝: 1099
- 资源: 35
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功