Java 并发学习

来源:互联网 发布:淘宝的ipad为什么便宜 编辑:程序博客网 时间:2024/06/05 08:09

一、创建任务

 

任务可以理解为一段独立执行的代码,它完成一定的功能。

Java 5及以上版本中不仅可以利用 Runnable接口,还可以利用Callable接口。

    两种任务的区别:Runnable run()方法完成的任务是没有返回值的 - void

    Callable call()方法完成的任务是有返回值的 - 返回值 有接口的泛型<V> 来制定

 

二、执行任务

 

通过java.util.concurrent.ExecutorService接口对象来执行任务,

这个接口对象由工具类java.util.concurrent.Executors的静态方法来创建。

 

相关类及接口说明:

Executors       提供建立线程池或线程工厂的方法.

ExecutorService           提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。

Executor                可以简单理解为一个线程的执行者,是Executors 的上一级接口。

Callable         线程要执行而去实现的接口

 

Future                  表示异步计算的结果,对执行的线程的状态检查,可以获得执行结果.

下面以一个例子来说明: 

 

 

 

 

查看输出:

 

看线程的名字都是类似于“pool-1-thread-4” 的字符串,可是为什么最大的索引是5呢?

对了,这里就与线程池中维护的线程数量有关了 当你改变线程池的大小时,这里的数据时会跟着变的,

 

service.submit(Callable callable)是来运行 Callable类型的任务,也可运行Runnable类型的任务

service.execute(Runnable runnable)只能用来运行 Runnable类型的任务

     注:这个execute方法是其父借口java.util.concurrent.Execute中的一个方法

 

 

大家也可以试试

ExecutorService service = Executors.newCachedThreadPool();

看输出的名字Thread名字会有什么变化

原创粉丝点击