1、runnable 与 callable区别

java 并发包runnable 与 callable-LMLPHP

java 并发包runnable 与 callable-LMLPHP

2、避免callable执行完任务,获取返回结果时,阻塞其他子线程

下面固定线程池,设置4个,表明同时只有4个线程在执行任务,当某个线程执行完一个任务,才会把另一个任务加进来继续执行(注释的是调度线程池)

{下图有10个任务要执行,但线程池里只有4个线程来执行任务}

java 并发包runnable 与 callable-LMLPHP

下面这种写法,可以给执行任务的线程传参(即自己重写的TaskCallabel,传i了)

java 并发包runnable 与 callable-LMLPHP

接上图,用Future接收实现callable接口的线程的返回值,会阻塞主线程

java 并发包runnable 与 callable-LMLPHP

下面自己实现的TsakCallable,在构造函数中接收参数;同时,实现了Callable接口,使得线程可以有返回值

java 并发包runnable 与 callable-LMLPHP

接上图

java 并发包runnable 与 callable-LMLPHP

执行结果如下:

java 并发包runnable 与 callable-LMLPHP

下面即是,当为调度线程池时,这个可以调度的线程池,即可以延时执行

java 并发包runnable 与 callable-LMLPHP

下面是java并发包中的几种线程池

java 并发包runnable 与 callable-LMLPHP

05-11 03:21