线程池

Posted zqy6666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池相关的知识,希望对你有一定的参考价值。

线程池

  是一个容纳多个线程容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源

  目的:节省资源

    通常,线程池都是通过线程池工厂创建,再调用线程池中的方法获取线程,再通过线程去执行任务方法。

使用线程池方式--Runnable接口

使用线程池中线程对象的步骤:

n  创建线程池对象

n  创建Runnable接口子类对象

n  提交Runnable接口子类对象

n  关闭线程池

package com.oracle.Demo02;

public class MyRunnable2 implements Runnable{
		public void run() {
			for (int i = 0; i <100; i++) {
				//getName() 得到线程名称
				System.out.println(Thread.currentThread().getName()+":"+i);
			}
		}
	
}

package com.oracle.Demo02;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Demo01 {

	public static void main(String[] args) {
		//从线程池工厂中创建线程池对象
		ExecutorService es=Executors.newFixedThreadPool(2);
		//创建线程任务对象
		MyRunnable2 mr=new MyRunnable2();
		//提交线程任务,让线程随机挑选一条想吃执行线程任务
		es.submit(mr);
		es.submit(mr);
		es.submit(mr);
		//释放资源
		es.shutdown();

	}

}

  

使用线程池方式—Callable接口

l  Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。

l  ExecutorService:线程池类

n  <T> Future<T> submit(Callable<T> task):获取线程池中的某一个线程对象,并执行线程中的call()方法

l  Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用

 

l  使用线程池中线程对象的步骤:

n  创建线程池对象

n  创建Callable接口子类对象

n  提交Callable接口子类对象

n  关闭线程池

package com.oracle.Demo02;

import java.util.concurrent.Callable;

public class MyCallble implements Callable<String> {

	@Override
	public String call() throws Exception {
		// TODO Auto-generated method stub
		return "abc";
	}

}

package com.oracle.Demo02;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Demo02 {

	public static void main(String[] args) throws InterruptedException, ExecutionException {
		//从线程池工厂中创建线程池对象
		ExecutorService ex=Executors.newFixedThreadPool(2);
		//创建线程任务对象
		MyCallble mc=new MyCallble();
		//执行线程任务并获取call方法返回值
		Future<String> f=ex.submit(mc);
		//从Future中获取返回值
		String str=f.get();
		System.out.println(str);
		//释放资源
		ex.shutdown();
		

	}

}

  

 

以上是关于线程池的主要内容,如果未能解决你的问题,请参考以下文章

Java——线程池

Motan在服务provider端用于处理request的线程池

Java线程池详解

Java线程池详解

Java 线程池详解

线程池-实现一个取消选项