采用多线程充分利用CPU资源

采用多线程充分利用CPU资源

首先说一下利用此法的需求场景:

假如你的一段业务逻辑设计到同时会有多个人点击提交,但是访问所消耗的资源有限的情况下,比如:秒杀,一个商品在有限的数量上以及有限的时间限制上需要处理多个请求。

模拟情景:三件商品,在三个人下过单之后但是没有付款的情况下,数据库中的信息还没有做持久化的修改但是在Redis中已经减少为0,但是仍然有人点击的情况下。抢占次数较高。就会需要考虑到CPU的资源问题。

做法

第一步:在spring容器中配置一个线程池

<!--线程池配置
-->
<bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" id="executor"><!-- 核心线程数,默认为1--><property name="corePoolSize" value="10" /><!--最大线程数,默认为Integer.MAX_VALUE--><property name="maxPoolSize" value="50" /><!--队列最大长度,一般需要设置值>=notifyScheduledMainExecutor.maxNum;默认为Integer.MAX_VALUE--><property name="queueCapacity" value="10000" /><!--线程池维护线程所允许的空闲时间,默认为60s--><property name="keepAliveSeconds" value="300" /><!--线程池对拒绝任务(无线程可用)的处理策略,目前只支持AbortPolicy、CallerRunsPolicy;默认为后者--><property name="rejectedExecutionHandler"><bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /></property>
</bean>

第二步:将你需要进行放在线程中的业务逻辑代码单独摘出来创建一个线程类。

创建一个线程类的方法有两种:

1.实现Runnable接口,注:推荐此种,因为开发都是面向接口开发,符合整篇的开发思想。

2.继承Thread类。
3.使用ExecutorService、Callable、Future实现有返回结果的多线程(jdk5.0之后)

在此不举例代码。

第三步:使用线程执行器执行线程

在你摘出来的业务逻辑代码处可以编写。

1.有参数的情况下可以将多线程需要的参数通过Redis队列传递过去。

2.编写触发多线程的代码 根据你在配置文件中装配的bean来进行调用触发。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部