java实现多线程(下)

JDK5.0新增了两种线程创建方式:

新增方式一:实现Callable接口

1.与使用Runnable相比,Callable功能更强大:

  >相比run()方法,可以有返回值

  >方法可以抛出异常

  >支持泛型的返回值

  >需要借助FutureTask类,比如获取返回结果

2.创建流程:

①创建一个实现Callable的实现类

②实现call方法,将此线程需要执行的操作声明在call()中

③创建Callable接口实现类的对象

④将此Callable接口实现类的对象作为传递到FutureTask构造器中,创建FutureTask的对象

⑤将FutureTask的对象作为参数传递到Thread类的构造器中,创建Thread类,并调用start()

如果想有返回值,那么可以再增加⑥FutureTask的对象调用get()获取Callable实现类中的call重写方法的返回值。

新增方式二:使用线程池

线程池相关API:ExecutorService和Executors

1.ExecutorService:真正的线程池接口。创建子类ThreadPoolExecutor

  >void exectute(Runnable command):执行命令,没有返回值,一般用来执行Runnable

  ><T>Future<T>submit(Callable<T>task):执行任务,有返回值,一般用来执行Callable

  >void shutdown():关闭连接池

2.Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池

  >Executors.newCachedThreadPool():创建一个可根据需要创建新线程的线程池

  >Executors.newFixedThreadPool(n):创建一个可重用固定线程数的线程池

  >Executors.newSingleThreadExecutor():创建一个只有一个线程的线程池

  >Executors.newScheduledThreadPool(n):创建一个线程池,它可安排在给定延迟后运行命令或定期执行。

猜你喜欢

转载自www.cnblogs.com/liuhuan425/p/10845271.html
今日推荐