JAVA多线程
ThreadPoolService(线程池服务类):这是线程池最核心的一个类。它在被创建了时候就创建了几个线程对象,但是这些线程并没有启动运行,但调用了start()方法启动线程池服务时,它们才真正运行。stop()方法可以停止线程池服务,同时停止池中所有线程的运行。而runTask(Tasktask)方法是将一个新的待执行任务交与线程池来运行。
ThreadPoolService类的定义如下:
Java代码
- import java.util.ArrayList;
- import java.util.List;
- public class ThreadPoolService {
- // 线程数
- public static final int THREAD_COUNT = 5;
- // 线程池状态
- private Status status = Status.NEW;
- private TaskQueue queue = new TaskQueue();
- public enum Status {
- /* 新建 */NEW, /* 提供服务中 */RUNNING, /* 停止服务 */TERMINATED,
- }
- private List<Thread> threads = new ArrayList<Thread>();
- public ThreadPoolService() {
- for (int i = 0; i < THREAD_COUNT; i++) {
- Thread t = new TaskThread(this);
- threads.add(t);
- }
- }
- // 启动服务
- public void start() {
Java代码
public class SimpleTaskTest extends Task { @Override public void deal() { // do something }
public static void main(String[] args) throws InterruptedException { ThreadPoolService service = new ThreadPoolService(); service.start(); // 执行十次任务 for (int i = 0; i < 10; i++) { service.runTask(new SimpleTaskTest()); } // 睡眠1秒钟,等待所有任务执行完毕 Thread.sleep(1000); service.stop(); } }
Java代码
public static ExecutorService newCachedThreadPool() { // other code }
public static ExecutorService newFixedThreadPool(int nThreads) { // other code }
public static ExecutorService newSingleThreadExecutor() { // other code }
Java代码
import java.util.concurrent.*;
public class ExecutorTest { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService es = Executors.newSingleThreadExecutor(); Future fr = es.submit(new RunnableTest());// 提交任务
Future fc = es.submit(new CallableTest());// 提交任务 // 取得返回值并输出 System.out.println((String) fc.get());
// 检查任务是否执行完毕 if (fr.isDone()) { System.out.println("执行完毕-RunnableTest.run()"); } else { System.out.println("未执行完-RunnableTest.run()"); }
// 检查任务是否执行完毕 if (fc.isDone()) { System.out.println("执行完毕-CallableTest.run()"); } else { System.out.println("未执行完-CallableTest.run()"); }
// 停止线程池服务 es.shutdown(); } }
class RunnableTest implements Runnable { public void run() { System.out.println("已经执行-RunnableTest.run()"); } }
class CallableTest implements Callable { public Object call() { System.out.println("已经执行-CallableTest.call()"); return "返回值-CallableTest.call()"; } }
使用完线程池之后,需要调用它的shutdown()方法停止服务,否则其中的所有线程都会保持运行,程序不会退出。 |