`

multi-thread(三)ExecutorService

 
阅读更多

1, 线程池调度线程,而不是new Thread.startI()调度

public class TestExecutorService {
    public static void main( String[] args ) {
        // 同时最多只能有2个线程 nThreads 
        ExecutorService pool = Executors.newFixedThreadPool( 2 );
        Thread t1 = new MyThread();
        Thread t2 = new MyThread();
        Thread t3 = new MyThread();
        // 将线程放入池中进行执行
        pool.execute( t1 );//
        pool.execute( t2 );
        pool.execute( t3 );
        // 关闭线程池
        pool.shutdown();
    }
}

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println( Thread.currentThread() + "is running" );
        try {
            Thread.sleep( 1000 );
        }
        catch ( InterruptedException e ) {
            e.printStackTrace();
        }
    }
}

 2,线程关闭,Futrue,Callable

public class TestExecutorService {
    public static void main( String[] args )
        throws Exception {
        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        Future<Boolean> future = threadPool.submit( new Callable<Boolean>() {
            @Override
            public Boolean call()
                throws Exception {
                System.out.println( "start......" );
                Thread.sleep( 1000 * 10 );
                System.out.println( "end........" );
                return Boolean.TRUE;
            }

        } );
        System.out.println( "future get start....." );
        // time out 后,线程仍会执行,
//        boolean rst = future.get( 2, TimeUnit.SECONDS );
//        System.out.println("Callable. run end = "+rst);
        // 测试mian线程threadPool不会主动关闭,不用future.get( 2, TimeUnit.SECONDS );一次只测一个
        // future.get();
        System.out.println( "future get end....." );
        threadPool.shutdown();
        // Callable中的方法,没有执行完就退出了
        System.out.println(future.cancel( true ));
    }
}

 

分享到:
评论

相关推荐

    Android 线程 多线程 Multi-thread

    ExecutorService exec = Executors.newCachedThreadPool(); for (int i = 0; i ; i++) { exec.execute(new Task(i)); } exec.shutdown(); } } ``` #### 五、线程的终止与优先级 **1. 终止线程** 在某些情况...

    java-multi-thread-mechanism.rar_java thread ppt

    - 通过`ExecutorService`和`ThreadPoolExecutor`来管理线程,提高性能和资源利用率。 - 提供线程复用,避免频繁创建和销毁线程的开销。 8. **线程优先级** - Java提供了10级线程优先级,但实际效果依赖于操作...

    Multi-threaded-transfer.rar_java文件传输_文件传输

    Java中的`ExecutorService`和`ThreadPoolExecutor`允许我们管理线程,避免频繁创建和销毁线程的开销。线程池可以预创建一定数量的线程,任务到来时直接分配,提高效率。 4. **Java文件I/O操作**: - `java.io`包...

    thread源码java-java-multi-thread-programming:java多线程编程核心技术

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升软件的效率和响应...在实际项目中,结合Java的开源库,如`java-multi-thread-programming-master`,可以进一步提升我们的多线程编程能力。

    multi-threaded-file-search.rar_多线程搜索

    多线程的核心在于Java的`Thread`类或`ExecutorService`接口,它们提供了创建和管理线程的机制。在本实例中,可能采用了以下步骤: 1. **任务拆分**:首先,需要将文件系统中的搜索范围划分为若干个子集,每个子集...

    thread-multi.zip

    "thread-multi.zip"这个压缩包文件显然包含了一个与Java多线程相关的项目,它可能是一个示例工程,帮助开发者理解如何利用多线程来查询批量数据。下面我们将详细探讨Java多线程的相关知识点以及在批量数据查询中的...

    Java-multi-threads-programming.rar_java programming

    例如,`ExecutorService`和`ThreadPoolExecutor`可以有效地管理线程,避免频繁创建和销毁线程带来的开销。`BlockingQueue`是一种线程安全的数据结构,适用于生产者-消费者模式。`Atomic`类提供了一组原子操作,能够...

    java-multi-thread:《 Java多线程编程核心技术》源代码-java source code

    - `Thread` 类:通过继承 `Thread` 类并重写 `run()` 方法来创建线程。 - `Runnable` 接口:实现 `Runnable` 接口,然后将其实例传递给 `Thread` 的构造函数,避免单继承限制。 - `ExecutorService` 和 `...

    multi-threading-parallel-asynchronous

    `java.lang.Thread`类是Java中创建和管理线程的基础,开发者可以通过创建Thread的实例并调用其`start()`方法来启动线程。此外,Java的并发API(java.util.concurrent)提供了一系列高级工具,如ExecutorService、...

    nimbo-java-multi-threading:Java多线程演示代码

    `nimbo-java-multi-threading`项目提供了丰富的示例代码,帮助开发者深入理解和实践Java的多线程技术。以下将详细讲解Java多线程的相关知识点。 1. **线程的创建** - **继承Thread类**:通过继承`java.lang.Thread...

    Multi-threaded-Server-Client-Application-using-TCP-Sockets:Java套接字编程

    - `ExecutorService`与`ThreadPoolExecutor`:更高级的多线程管理方式,可以控制线程池的大小,避免线程过度创建和销毁,提高系统效率。 4. **异常处理**:在网络编程中,常见的异常如`IOException`需要妥善处理,...

    Multi-Threaded-Restaurant

    在Java中,可以通过两种方式创建线程:继承Thread类或实现Runnable接口。在这个项目中,每个角色(如食客、厨师)可能都代表一个独立的线程,每个线程负责特定的任务,例如食客下单、厨师烹饪、烤箱烘烤食物等。这种...

    Multi-Threading:使用多线程知识来实现​​单词树

    在项目"Multi-Threading-master"中,很可能包含了一个实际的Java实现,通过研究源码,我们可以更深入地理解如何在多线程环境下构建和操作单词树。通过这种方式,我们可以提升程序的并发性能,同时保证数据的一致性和...

    multi thread new

    "multi thread new" 可能指的是在Java或者C++等编程语言中创建新线程的方法。在现代计算环境中,多线程使得程序能够同时执行多个任务,从而提高了处理器的利用率和程序的响应速度。 一、多线程基础 1. **线程定义*...

    Multi-Threading

    线程优先级范围是1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY),默认优先级是5(Thread.NORM_PRIORITY)。优先级高的线程可能先被执行,但不保证。 七、守护线程(Daemon Thread) 守护线程是一种特殊的...

    multi_thread_example:multi_thread_examples

    标题中的"multi_thread_example"和描述中的"multi_thread_examples"都指向了多线程编程的例子。在Java中,多线程是并发处理任务的关键技术,它允许多个执行单元(线程)同时运行,提高程序的效率和响应速度。本项目...

    multi thread

    三、线程控制 Java提供了多种方法来控制线程的执行,如sleep()使线程暂停指定时间,join()让当前线程等待指定线程结束,yield()让当前线程放弃CPU使用权等。此外,还可以使用synchronized关键字实现线程同步,防止...

    java basic, such as multi thread, functional programming

    在“java basic, such as multi thread, functional programming”这个主题中,我们将深入探讨Java中的多线程和函数式编程两个重要概念。 首先,让我们来了解多线程。在Java中,多线程允许程序同时执行多个任务,极...

    Java线程编程学习笔记(二)

    首先,标题中的“Java线程编程学习笔记(二)”表明这是系列教程的第二部分,暗示了前一部分可能已经介绍了线程的基础概念,如如何创建线程(通过实现Runnable接口或继承Thread类)、线程的状态(新建、就绪、运行、...

    Introduction to Java Threads

    - **java.util.concurrent**包:提供了高级的并发工具类,如`ExecutorService`、`Semaphore`、`CountDownLatch`等。 #### 线程间的通信 - **等待/通知机制**:通过`wait()`、`notify()`和`notifyAll()`方法实现...

Global site tag (gtag.js) - Google Analytics