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();
}
}
}
分享到:
相关推荐
JDK7多线程部分类(接口)关系图,根据官网得出
在JDK5中,Java引入了一套强大的多线程并发库,极大地提升了多线程编程的效率和安全性。这个库提供了丰富的类和接口,使得开发者能够更好地控制线程的执行、同步和通信。 1. **线程** - **线程与进程的关系**:...
JDK 5.0 是用 Java 语言创建高可伸缩的并发应用程序的主要步骤。JVM 已经进行了改进,允许类利用硬件级别支持并发,并且提供了一组丰富的新并发构造块,使开发并发应用程序更加容易。 <br>本教程将介绍 JDK 5.0 ...
`HashMap`之所以在多线程环境下出现问题,主要源于其内部实现机制。在`HashMap`中,数据是以键值对的形式存储在一个数组中,每个键值对对应一个链表或红黑树的节点。当多个线程同时进行`put`操作时,可能导致以下...
ConcurrentLatch是一个基于JDK的多线程归类并发处理闩工具(基于JDK1.8)。与CountDownLatch不同的是它可以方便的获取哪个任务对应的哪个返回内容。与Future(或者FutureTask)不同的是,他可以通过一系列策略管理多个...
介绍一个通用多线程服务模块。是利用jdk线程池,多线程并行处理多任务,以提高执行效率。
这种方式降低了上下文切换的成本,提高了并发性能,同时也降低了多线程编程的复杂性。 **JDK21虚拟线程的特性** 1. **轻量级实现**:虚拟线程不需要操作系统级别的线程,减少了创建和销毁线程的开销。 2. **协作式...
在JDK5中,多线程并发库引入了一系列新的特性,极大地增强了Java处理并发问题的能力。以下是关于这个主题的详细解释: 1. **线程**: - **线程与进程的关系**:进程是一个正在执行的程序实体,而线程是进程内部的...
通过这种方式,开发者可以更方便地处理集合数据和编写多线程程序。例如,`Stream API`的引入就充分利用了Lambda表达式,使得对集合的并行操作变得更加简洁高效。 其次,方法引用来替代匿名内部类,这是Lambda表达式...
通过阅读《Java-jdk10-最新最全多线程编程实战指南-核心篇》这本书,开发者不仅可以理解Java多线程编程的基础知识,还能掌握高级并发编程技巧,从而在实际项目中实现高性能、高并发的程序设计。对于Java开发者来说,...
由浅入深,通过图解和手写代码,讲解Java版的多线程,主要讲解如下内容: ...JDK多线程工具包中,若干种工具的原理和手写实现: ReentrantLock、CountDownLanuh、CyclicBarrier、Semaphore
3. **核心类库:** 如集合框架(ArrayList、HashMap等)、I/O流、多线程、网络编程、日期时间API、反射、国际化等。 4. **JVM(Java虚拟机):** 包括内存模型、垃圾收集、类加载机制、JIT编译器优化等内容。 5. *...
JDK提供了丰富的类库,涵盖了I/O、网络通信、集合框架、多线程、反射、异常处理等多个方面。文档中会详述这些类库的使用方法,例如`java.io`包用于输入输出操作,`java.net`包支持网络编程,`java.util`包包含了集合...
这份"jdk api 1.8_google"文档很可能是JDK 8的API文档,详细列出了所有类、接口、方法和常量,涵盖了核心类库、集合框架、网络编程、I/O流、多线程、反射等多个方面。通过阅读这份文档,开发者可以: 1. 学习每个类...
Lambda允许将匿名函数作为参数传递,简化了多线程编程和事件处理,尤其是对集合操作的处理,如Stream API中的函数式操作。 2. **Stream API**:Stream API是Java 8中新增的一个重要组件,它提供了一种新的处理数据...
JDK8对并发库也进行了增强,如`ConcurrentHashMap`的改进,新增`AtomicIntegerArray`、`LongAdder`等原子类型,以及`ForkJoinPool`和`Parallel Streams`的引入,提高了多线程环境下的性能。 **9. Nashorn ...
1. **Lambda表达式**:JDK 1.8引入了Lambda表达式,这是一种简洁的匿名函数写法,用于处理函数式接口,简化了多线程编程和事件处理。 2. **Stream API**:新的Stream API允许开发者对集合进行声明式处理,提供了更...
Lambda表达式可以作为参数传递,也可以用作返回值,极大地简化了对集合的处理和多线程编程。 2. **函数式接口**:为了支持lambda,Java定义了一系列函数式接口,如`Runnable`、`Callable`、`Consumer`、`Supplier`...
Lambda允许将匿名函数作为参数传递,或者直接定义为方法的返回值,简化了多线程处理和集合操作。 2. **函数式接口**:为了支持Lambda,Java引入了`@FunctionalInterface`注解,标记那些只有一个抽象方法的接口。...