Java零碎通用代码工具类2

在Java开发中经常使用到一些比较常用的通用性代码,这里部分整理出来,记录一下零碎的知识代码,方便以后使用,以工具类形式给出;

// 不使用定时任务,定时按时间轮询启动新线程执行某业务
@Service
public class Biz01Service(
	@Autowired
	private ScheduledExecutorService scheduledExecutorService;

	/**
	* java内部实现,不用定时任务,
	* 从当前时间开始延时0秒,每隔30秒重复执行一次执行器任务	
	*/
	public void fun01() {
		//...other code..
		// 从当前时间开始延时0秒,每隔30秒重复执行一次执行器,直到任务介绍终止任务
		scheduledExecutorService.scheduleWithFixedDelay(
			new XxxBizExecutor(param1, param2, param3), 0, 30, TimeUnit.SECONDS
		);
		//...other code..
	}
}

执行器类,业务逻辑

//执行器类,业务处理逻辑
@Service
public class XxxBizExecutor implements Runnable {
	@Autowired
	private UserMapper userMappers;
	
	@Autowired
	private ProductService productServices
	
	private static UserMapper userMapper;
	private static ProductService productService;
	private String param1;
	private long param2;
	private String param3;
	
	public XxxBizExecutor(){}
	
	//构造函数初始化变量
	public XxxBizExecutor(String param1, long param2, String param3){
		this.param1 = param1;
		this.param2 = param2;
		this.param3 = param3;
	}
	
	// 启动应用时,仅一次初始化相关Bean对象;
	@PostConstruct
	public void initData() {
		this.userMapper = userMappers;
		this.productService = productServices;
	}
	
	// 执行器的具体执行业务逻辑
	@Override
	public void run() {
		//...biz code..
		int num = productService.getCount(param1)
		
		//达到预期条件,即库存为0执行,否则不执行
		if (0 == num) {
			//...biz logic...
			
			//主动抛出异常,退出当前执行任务
			throw new Exception();
		}
	}
	
}
// 用户自定义线程池
@Configuration
public class UserThreadPoolConfig {
	
	/**用户自定义线程池,异步的多线程之间不能共享请求的头信息*/
	@Bean("asyncPostExecutor")
	public Executor asyncPostExecutor(){
		ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
		executor.setCorePololSize(4);
		executor.setMaxPoolSize(8);
		executor.setQueueCapacity(50);
		executor.setKeepAllveSeconds(60);
		executor.setRejectedExecutionHanlder(new ThreadPoolExecutor.CallerRunsPolicy());
		executor.setThreadNamePrefix("asyncPostExecutor--thread-pool-");
		return executor;
		
	}
	
	/**用户自定义线程池,异步的多线程之间可以共享某些信息,如请求头信息的登陆用户信息等*/
	@Bean("asyncQueryExecutor")
	public Executor asyncQueryExecutor(){
		ExecutorService executor = Executors.newFixedThreadPool(8);
		return TtlExecutors.getTtlExecutorService(executor);
	}
}
// 异步触发线程执行某任务
@Service
public class ProductService {
	
	@Autowired
	private Executor asyncPostExecutor;
	
	public String saveProduct(Product product) {
		// ...other code...
		
		// 异步触发线程执行某任务
		CompletableFuture.runAsync((param1, param2)->{
			//...user biz logic...			
		}, asyncPostExecutor);
		
		// ...other code...
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值