线程池的用法

一。线程池的实例化

ExecutorService pool = Executors.newFixedThreadPool(10);

 

二。线程组的概念

    就是将n个线程归到某一类总控开关下。 我这里使用的是list结构,当然JDK的ThreadGroup也是可行。

	//http发送线程组
	public static List<HttpSender> httpSendThreadGroup = new ArrayList<HttpSender>();

		for(int i=0;i<10;i++) {
			HttpSender httpSend = new HttpSender();
			httpSend.setName("Thread:HttpSender-"+i);
			httpSendThreadGroup.add(httpSend);
			httpSend.start();
		}

 

三。线程池

 

 

1.先演示一种用法: 大小为10的线程池,丢进去10个常驻线程 (也就是run方法里面做无限循环)

		try {
			httpSendExecutor = Executors.newFixedThreadPool(10);
			for(int i=0;i<10;i++){
				httpSendExecutor.execute(new HttpSender());
			}
		} catch (Exception e) {
			logger.error("HttpSender start error!", e);
		}

 

那么这种用法,线程池的特性其实得不到体现。跟上面描述的线程组,就是一个概念了。

 

2. JDK演示的一种用法,

 *     try {
 *       for (;;) {
 *         pool.execute(new Handler(serverSocket.accept()));
 *       }
 *     } catch (IOException ex) {
 *       pool.shutdown();
 *     }

 这里Handle是非常驻线程 ,即一个线程的run方法,只处理一次accept,然后线程退出。这里是无限向pool提交线程,由线程池来调度

 

 

那么问题就出来了: 是常驻线程无限循环去做job好,还是由线程池无限支持新线程做job然后销毁比较好呢??

暂时哥也没啥答案。。一切敬请期待把,想法子做个测试

你可能感兴趣的:(jdk,thread)