java.util.concurrent初始化线程池及多线程的代码
spring配置
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd"> <context:component-scan base-package="com.test.task.task_demo"/> <bean id="threadPool" class="com.test.task.task_demo.thread.ThreadPool" init-method="init"> <property name="corePoolSize" value="5" /> <property name="maxPoolSize" value="3000" /> <property name="keepAliveTime" value="5000" /> </bean> </beans>
线程池class
package com.test.task.task_demo.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class ThreadPool { private ExecutorService threadPoolExecutor; private int corePoolSize; private int maxPoolSize; private long keepAliveTime; public synchronized void init() { setThreadPoolExecutor(new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); } public ExecutorService getThreadPoolExecutor() { return threadPoolExecutor; } public void setThreadPoolExecutor(ExecutorService threadPoolExecutor) { this.threadPoolExecutor = threadPoolExecutor; } public void setCorePoolSize(int corePoolSize) { this.corePoolSize = corePoolSize; } public void setMaxPoolSize(int maxPoolSize) { this.maxPoolSize = maxPoolSize; } public void setKeepAliveTime(long keepAliveTime) { this.keepAliveTime = keepAliveTime; } }
业务类
package com.test.task.task_demo.thread; public class FutureService implements Runnable { private int i; public FutureService(int i) { super(); this.i = i; } @Override public void run() { System.err.println("i=" + i + "thread=" + Thread.currentThread().getName()); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } }
main方法
package com.test.task.task_demo.thread; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:/applicationContext.xml"}) public class Main { @Autowired private ThreadPool threadPool; @Test public void threadTest() throws IOException{ List<Future<String>> futures = new ArrayList<Future<String>>(); for (int i = 0; i < 10; i++) { futures.add((Future<String>) threadPool.getThreadPoolExecutor().submit(new FutureService(i))); } System.in.read(); } }
更多java.util.concurrent的api详解: