`

jdk中的多线程

阅读更多
public final class ThreadUtil {

    public static ExecutorService newThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,
        TimeUnit unit, BlockingQueue<Runnable> workQueue, String processName, boolean isDaemon) {
        return new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, newThreadFactory(processName, isDaemon));
    }

    public static ExecutorService newSingleThreadExecutor(String processName, boolean isDaemon) {
        return Executors.newSingleThreadExecutor(newThreadFactory(processName, isDaemon));
    }

    public static ScheduledExecutorService newSingleThreadScheduledExecutor(String processName, boolean isDaemon) {
        return Executors.newSingleThreadScheduledExecutor(newThreadFactory(processName, isDaemon));
    }

    public static ScheduledExecutorService newFixedThreadScheduledPool(int nThreads, String processName,
        boolean isDaemon) {
        return Executors.newScheduledThreadPool(nThreads, newThreadFactory(processName, isDaemon));
    }

    public static ThreadFactory newThreadFactory(String processName, boolean isDaemon) {
        return newGenericThreadFactory("Remoting-" + processName, isDaemon);
    }

    public static ThreadFactory newGenericThreadFactory(String processName) {
        return newGenericThreadFactory(processName, false);
    }

    public static ThreadFactory newGenericThreadFactory(String processName, int threads) {
        return newGenericThreadFactory(processName, threads, false);
    }

    public static ThreadFactory newGenericThreadFactory(final String processName, final boolean isDaemon) {
        return new ThreadFactory() {
            private AtomicInteger threadIndex = new AtomicInteger(0);

            @Override
            public Thread newThread(Runnable r) {
                Thread thread = new Thread(r, String.format("%s_%d", processName, this.threadIndex.incrementAndGet()));
                thread.setDaemon(isDaemon);
                return thread;
            }
        };
    }

    public static ThreadFactory newGenericThreadFactory(final String processName, final int threads,
        final boolean isDaemon) {
        return new ThreadFactory() {
            private AtomicInteger threadIndex = new AtomicInteger(0);

            @Override
            public Thread newThread(Runnable r) {
                Thread thread = new Thread(r, String.format("%s_%d_%d", processName, threads, this.threadIndex.incrementAndGet()));
                thread.setDaemon(isDaemon);
                return thread;
            }
        };
    }

    public static Thread newThread(String name, Runnable runnable, boolean daemon) {
        Thread thread = new Thread(runnable, name);
        thread.setDaemon(daemon);
        thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            public void uncaughtException(Thread t, Throwable e) {

            }
        });
        return thread;
    }

    public static void shutdownGracefully(final Thread t) {
        shutdownGracefully(t, 0);
    }

    public static void shutdownGracefully(final Thread t, final long millis) {
        if (t == null)
            return;
        while (t.isAlive()) {
            try {
                t.interrupt();
                t.join(millis);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }

    public static void shutdownGracefully(ExecutorService executor, long timeout, TimeUnit timeUnit) {
        executor.shutdown();
        try {
            if (!executor.awaitTermination(timeout, timeUnit)) {
                executor.shutdownNow();
                if (!executor.awaitTermination(timeout, timeUnit)) {

                }
            }
        } catch (InterruptedException ie) {
            executor.shutdownNow();
            Thread.currentThread().interrupt();
        }
    }
}
0
0
分享到:
评论

相关推荐

    JDK7多线程部分类(接口)关系图

    JDK7多线程部分类(接口)关系图,根据官网得出

    JDK5中的多线程并发库.doc

    在JDK5中,Java引入了一套强大的多线程并发库,极大地提升了多线程编程的效率和安全性。这个库提供了丰富的类和接口,使得开发者能够更好地控制线程的执行、同步和通信。 1. **线程** - **线程与进程的关系**:...

    JDK5中的并发(多线程)

    JDK 5.0 是用 Java 语言创建高可伸缩的并发应用程序的主要步骤。JVM 已经进行了改进,允许类利用硬件级别支持并发,并且提供了一组丰富的新并发构造块,使开发并发应用程序更加容易。 &lt;br&gt;本教程将介绍 JDK 5.0 ...

    jdk中线程安全的集合类.docx

    `HashMap`之所以在多线程环境下出现问题,主要源于其内部实现机制。在`HashMap`中,数据是以键值对的形式存储在一个数组中,每个键值对对应一个链表或红黑树的节点。当多个线程同时进行`put`操作时,可能导致以下...

    基于JDK的多线程归类并发处理闩工具(基于JDK1.8)

    ConcurrentLatch是一个基于JDK的多线程归类并发处理闩工具(基于JDK1.8)。与CountDownLatch不同的是它可以方便的获取哪个任务对应的哪个返回内容。与Future(或者FutureTask)不同的是,他可以通过一系列策略管理多个...

    通用多线程模块(jdk线程池的运用)

    介绍一个通用多线程服务模块。是利用jdk线程池,多线程并行处理多任务,以提高执行效率。

    JDK21虚拟线程详解.pptx.pptx

    这种方式降低了上下文切换的成本,提高了并发性能,同时也降低了多线程编程的复杂性。 **JDK21虚拟线程的特性** 1. **轻量级实现**:虚拟线程不需要操作系统级别的线程,减少了创建和销毁线程的开销。 2. **协作式...

    JDK5中的多线程并发库

    在JDK5中,多线程并发库引入了一系列新的特性,极大地增强了Java处理并发问题的能力。以下是关于这个主题的详细解释: 1. **线程**: - **线程与进程的关系**:进程是一个正在执行的程序实体,而线程是进程内部的...

    JDK1.8中文文档 JDK1.8中文 jkd8中文文档 JDK中文版

    通过这种方式,开发者可以更方便地处理集合数据和编写多线程程序。例如,`Stream API`的引入就充分利用了Lambda表达式,使得对集合的并行操作变得更加简洁高效。 其次,方法引用来替代匿名内部类,这是Lambda表达式...

    Java-jdk10-最新最全多线程编程实战指南-核心篇

    通过阅读《Java-jdk10-最新最全多线程编程实战指南-核心篇》这本书,开发者不仅可以理解Java多线程编程的基础知识,还能掌握高级并发编程技巧,从而在实际项目中实现高性能、高并发的程序设计。对于Java开发者来说,...

    JDK自带多线程工具包详解

    由浅入深,通过图解和手写代码,讲解Java版的多线程,主要讲解如下内容: ...JDK多线程工具包中,若干种工具的原理和手写实现: ReentrantLock、CountDownLanuh、CyclicBarrier、Semaphore      

    jdk17中文说明文档

    3. **核心类库:** 如集合框架(ArrayList、HashMap等)、I/O流、多线程、网络编程、日期时间API、反射、国际化等。 4. **JVM(Java虚拟机):** 包括内存模型、垃圾收集、类加载机制、JIT编译器优化等内容。 5. *...

    JDK中文文档

    JDK提供了丰富的类库,涵盖了I/O、网络通信、集合框架、多线程、反射、异常处理等多个方面。文档中会详述这些类库的使用方法,例如`java.io`包用于输入输出操作,`java.net`包支持网络编程,`java.util`包包含了集合...

    jdk_8中文文档

    这份"jdk api 1.8_google"文档很可能是JDK 8的API文档,详细列出了所有类、接口、方法和常量,涵盖了核心类库、集合框架、网络编程、I/O流、多线程、反射等多个方面。通过阅读这份文档,开发者可以: 1. 学习每个类...

    jdk8中文说明文档_CHM.zip jdk1.8文档 jdk1.8说明文档

    Lambda允许将匿名函数作为参数传递,简化了多线程编程和事件处理,尤其是对集合操作的处理,如Stream API中的函数式操作。 2. **Stream API**:Stream API是Java 8中新增的一个重要组件,它提供了一种新的处理数据...

    JDK8 中文帮助文档(jdk api 1.8 google.CHM)

    JDK8对并发库也进行了增强,如`ConcurrentHashMap`的改进,新增`AtomicIntegerArray`、`LongAdder`等原子类型,以及`ForkJoinPool`和`Parallel Streams`的引入,提高了多线程环境下的性能。 **9. Nashorn ...

    jdk1.8 api 中文文档

    1. **Lambda表达式**:JDK 1.8引入了Lambda表达式,这是一种简洁的匿名函数写法,用于处理函数式接口,简化了多线程编程和事件处理。 2. **Stream API**:新的Stream API允许开发者对集合进行声明式处理,提供了更...

    JDK8 API 中文 文档.CHM

    Lambda表达式可以作为参数传递,也可以用作返回值,极大地简化了对集合的处理和多线程编程。 2. **函数式接口**:为了支持lambda,Java定义了一系列函数式接口,如`Runnable`、`Callable`、`Consumer`、`Supplier`...

    jdk8、jkd8中文手册

    Lambda允许将匿名函数作为参数传递,或者直接定义为方法的返回值,简化了多线程处理和集合操作。 2. **函数式接口**:为了支持Lambda,Java引入了`@FunctionalInterface`注解,标记那些只有一个抽象方法的接口。...

Global site tag (gtag.js) - Google Analytics