`

Java之 java.util.concurrent 包之Executor与ExecutorService

阅读更多
一、问题: execute() 与 submit() 的区别?

execute()
来自 Executor 接口,
没有返回值,
只接受 Runnable 对象。

submit()
来自 ExecutorService 接口( ExecutorService 接口继承了  Executor 接口)
返回 Future 对象
可以接受 Callable, Runnable 对象。



二、程序



import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import org.junit.Test;


public class T01_Submit_VS_Execute {

    private Runnable runnable = new Runnabled();        
    private Callable<String> callable = new Callabled();
    
    @Test
    public void testName() throws Exception {
        // public interface Executor
        // public interface ExecutorService extends Executor
        
        Executor e        = Executors.newCachedThreadPool();
        ExecutorService es = Executors.newScheduledThreadPool(10);
        
        
        // execute()
        // void java.util.concurrent.Executor.execute(Runnable command)
        //=====================================================================================
        // execute the given command (at some time in the future) with void return result.
        // 
        e.execute(runnable); 
        es.execute(runnable);
        
        
        
        
        // submit()
        // <T> Future<T> java.util.concurrent.ExecutorService.submit()
        //=====================================================================================
        /*
         submit and execute a value-returning task and 
         returns a Future representing the pending results of the task. 
         The Future's get() method will return the task's result upon successful completion. 
        
         If you would like to immediately block and waiting for a task, 
         you can use constructions of the form:
         result = exec.submit(aCallable).get(); 
        */
        
        Future<String> f1 = es.submit(callable); 
        
        
        /*
         Submits a Runnable task for execution and 
         returns a Future representing that task. 
         
         The Future's get method will return null upon successful completion.
         */
        Future<?>      f2 = es.submit(runnable);        
        Future<String> f3 = es.submit(runnable, "");
        
        
        // Waits (if necessary) for the computation to complete, and then retrieves its result.
        f1.get();
        f2.get();
        f3.get();
        
        
        /**
         NOTE: Difference between "execute()" and "submit()"
         
         1. void execute(): 
            # execute a task, don't expect an execution result.
         
         2. Future submit(): 
            # execute a task, don't expect an execution result.
              OR
            # execute a task, expect a result.
              - call get() method immediately with blocking the thread.
              - store Future object first, then call get() method after 
                all task complete.
         */
        
    }
    
    
    class Runnabled implements Runnable{
        @Override
        public void run() {
          
        }
    }
    
    class Callabled implements Callable<String>{
        @Override
        public String call() throws Exception {
            return null;
        }
    }
    
}









java.util.concurrent包之Execuotor系列文章

00_Java之 java.util.concurrent 包之概述

01_Java之java.util.concurrent包之Executor与ExecutorService

02_Java之 java.util.concurrent 包之ExecutorService之submit () 之 Future

03_Java之多线程之Callable与Future

04_Java之多线程之Lock




转载请注明,
原文出处:http://lixh1986.iteye.com/blog/2360304











-
分享到:
评论

相关推荐

    java.util.concurrent 学习ppt

    Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...

    java.util.concurrent 测试源文件

    Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...

    java.util.concurrent.uml.pdf

    标题中提到了“java.util.concurrent.uml.pdf”,这表明文件是一份Java并发编程工具包java.util.concurrent的UML(统一建模语言)类结构图的PDF格式文件。UML图能够帮助开发者理解Java并发包中的类、接口及其关系,...

    java.util.concurrent 实现线程池队列

    `java.util.concurrent` 包(简称JUC)是Java提供的一个强大的并发工具包,它提供了丰富的并发组件,如线程池、并发容器、锁和同步机制等,极大地简化了并发编程的复杂性。本篇文章将深入探讨如何使用`java.util....

    java_util_concurrent中文版pdf

    《Java Util Concurrent中文版》是Java并发编程领域的重要参考资料,主要涵盖了Java标准库中的`java.util.concurrent`包及其相关类和接口。这个包是Java多线程编程的核心,提供了高效、安全的并发工具,帮助开发者...

    java concurrent 包 详细解析

    2. **Executor框架**:`java.util.concurrent.Executor`是执行任务的核心接口,它定义了运行任务的方法。`ExecutorService`是Executor的一个子接口,提供了管理和控制执行器的额外功能,如`shutdown()`用于关闭执行...

    tascalate-concurrent:阻塞(IO绑定)的实现可取消java.util.concurrent.CompletionStage和java.util.concurrent.ExecutorService-s的相关扩展

    从版本该库以多发行版JAR的形式提供,并且可以与Java 8作为类路径库或与Java 9+作为模块一起使用。 重要的! 在版本,工件已重命名:新名称: &lt; dependency&gt; &lt; groupId&gt;...

    JAVA课程学习笔记.doc

    - `java.util.concurrent.Executor`:这是最基本的执行器接口,只有一个 `execute(Runnable task)` 方法,用于提交任务。 - `java.util.concurrent.ExecutorService`:扩展了 `Executor`,提供了管理执行器生命周期...

    Executor,Executors,ExecutorService比较.docx

    `Executors`是`java.util.concurrent`包下的工具类,它提供了多个静态工厂方法,用于创建不同类型的线程池。常见的线程池类型有: - **newFixedThreadPool(int nThreads)**:创建一个固定大小的线程池。线程池的...

    Java实现生产者消费者模型

    Java实现生产者消费者模型 生产者消费者模型,是一般面试题都会考的,下面介绍使用ReetrantLock实现 生产者消费者模型。...import java.util.concurrent.ExecutorService; import java.util.concurrent.Executor

    Java并发任务执行.pdf

    Java `java.util.concurrent`包提供了各种并发工具类,包括`ExecutorService`和`Future`接口,它们允许我们更高效地管理和协调并发任务。例如,可以使用`ExecutorService.newFixedThreadPool(int nThreads)`创建一个...

    java获取压缩文件的名称并解压

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class ...

    java的concurrent用法详解

    `Executor`框架是`java.util.concurrent`的核心组件之一,它为任务的执行提供了一个统一的接口。其中最重要的接口是`ExecutorService`,它定义了线程池的行为,使得我们可以将任务(`Runnable`或`Callable`对象)...

    java 资源搜索并下载(线程等待和通报)

    每个线程负责下载不同的资源,`java.util.concurrent`包提供了丰富的工具,如`ExecutorService`和`Future`,可以方便地管理线程池和控制并发执行。线程池可以避免频繁创建和销毁线程带来的开销。 四、线程等待和...

    java线程池常用方法.docx

    自Java 5引入并发包`java.util.concurrent`以来,线程的管理与控制变得更为高效与便捷。在这个包中,`Executor`框架成为了线程管理和调度的核心。通过`Executor`,我们可以更方便地创建线程池,并对线程进行管理。 ...

    2022年Java代码构建一个线程池Java教程.docx

    在Java中,线程池的实现基于`java.util.concurrent`包中的`ExecutorService`接口和`ThreadPoolExecutor`类。`ThreadPoolExecutor`允许我们定制线程池的行为,如核心线程数、最大线程数、线程存活时间、工作队列等...

    java 实现调度器

    这通常是通过Java中的`java.util.Timer`类或者`java.util.concurrent.ScheduledExecutorService`来实现的。这两个工具提供了不同的功能和使用场景,让我们一一进行深入探讨。 首先,我们来看`java.util.Timer`类。...

    java定时器\多线程(池)\java队列Demo

    线程池(java.util.concurrent.ExecutorService) 为了解决频繁创建和销毁线程的开销,Java提供了线程池的概念。线程池是一组预先创建的线程,用于处理到来的任务。`ExecutorService` 接口和它的实现类(如 `...

    米哈游笔试题目-Java方向.docx

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class AsyncTaskFramework&lt;T&gt; { private final ExecutorService executor; ...

Global site tag (gtag.js) - Google Analytics