Java多线程Callable接口、线程池

Callable和runnable对比

  • 相比run()方法,可以有返回值 
  • ’方法可以抛出异常
  • 支持泛型的返回值
  • 需要借助FutureTask类,比如获取返回结果

 

Future接口 

  • 可以对具体Runnable、Callable任务的执行结果进行取消、查询是 否完成、获取结果等。 
  • FutrueTask是Futrue接口的唯一的实现类
  • FutureTask 同时实现了Runnable, Future接口。
  • 它既可以作为 Runnable被线程执行,又可以作为Future得到Callable的返回值

 

什么是线程池?

提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。

package www.fancy.thread4;

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

class NumberThread implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + i);
            }
        }
    }
}

public class ThreadPool {
    public static void main(String[] args) {
        //提供制定线程数量的线程池
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        //指定执行线程的操作
        executorService.execute(new NumberThread());//用于Runnable接口
        //关闭线程池
        executorService.shutdown();
    }
}

 

posted @ 2022-01-26 23:38  Fancy[love]  阅读(96)  评论(0编辑  收藏  举报