public class ThreadPool {
public static void main(String[] args) {
/*
//线程池
int corePoolSize = 2;
int maximumPoolSize = 5;
long keepAliveTime = 0;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable>(8);
// ThreadPoolExecutor pool = new ThreadPoolExecutor(corePoolSize,
// maximumPoolSize,
// keepAliveTime,
// unit,
// workQueue);
// for(int i=0;i<25;i++)
// pool.submit(new PrintThread());
// pool.shutdown();
//拒绝策略:中止
keepAliveTime = 30;
ThreadPoolExecutor pool2 = null;
try {
pool2= new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), new AbortPolicy());
for(int i=0;i<25;i++)
pool2.submit(new PrintThread());
}finally {
pool2.shutdown();
}
*/
//单个线程:一个一个地执行
// ExecutorService e = Executors.newSingleThreadExecutor();
// Executors.newSingleThreadExecutor(threadFactory);
// for(int i=0;i<10;i++) {
// e.execute(new PrintThread());
// }
// e.shutdown();
//固定线程池:3个工作线程
// ExecutorService e = Executors.newFixedThreadPool(3);
// for(int i=0;i<10;i++)
// e.execute(new PrintThread());
// e.shutdown();
//需要多少线程就创建多少
// ExecutorService e = Executors.newCachedThreadPool();
// for(int i=0;i<1000;i++)
// e.execute(new PrintThread());
// e.shutdown();
//定时任务:单线程
// ScheduledExecutorService e = Executors.newSingleThreadScheduledExecutor();
// e.schedule(new PrintThread(), 10, TimeUnit.SECONDS); //延迟10秒执行一次
// e.schedule(new PrintThread(), 10, TimeUnit.SECONDS);
// e.scheduleWithFixedDelay(new PrintThread(), 2, 12, TimeUnit.SECONDS); //每隔12秒执行一次
//定时任务:三个线程并发执行
ScheduledExecutorService e = Executors.newScheduledThreadPool(3);
for(int i=0;i<4;i++)
e.scheduleWithFixedDelay(new PrintThread(), 2, 5, TimeUnit.SECONDS); //每隔5秒执行一次
e.scheduleAtFixedRate(new PrintThread(), 2, 6, TimeUnit.SECONDS); //每隔6执行一次
}
static class PrintThread implements Runnable{
public void run() {
System.out.println("hello..");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
相关推荐
JDK自带线程池分析 JDK 自带线程池是 Java 语言中用于管理和执行线程的工具,旨在提高多线程编程的效率和灵活性。本文将详细介绍 JDK 自带线程池的组成、创建方法、优点和常见应用场景。 多线程技术 多线程技术是...
jdk自带线程池实例详解 jdk自带的线程池是Java开发中一个非常重要的概念,特别是在多线程编程中。线程池是线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。下面我们来详细了解jdk...
3. **使用JDK自带线程池的阻塞服务器**:通过线程池管理线程资源,提高了资源利用率,减少了线程创建销毁的开销。 4. **NIO基础知识**:介绍了NIO的基本概念,包括缓冲区(Buffer)、通道(Channel)、选择器(Selector)...
“相关的性能参数已经优化好”意味着开发者可能已经调整了Tomcat的默认配置,例如线程池大小、内存分配、连接超时等关键参数,以提高其在特定工作负载下的性能表现。这有助于在服务器高负载下保持良好的响应速度和...
5. `jconsole`:JDK自带的JVM监控工具,提供性能分析和内存管理等功能。 6. `jmap`:用于查看堆内存详细信息,辅助诊断内存泄漏问题。 四、JDK 1.6的开发实践 在实际开发中,JDK 1.6广泛应用于企业级应用、桌面...
Java线程池是一种高效利用系统资源的机制,它允许开发者预先配置一定数量的线程,以便在...通过对JDK自带的`ThreadPoolExecutor`源码的学习,我们可以更深入地了解线程池的工作细节,以便更好地利用这一强大的工具。
实现原理为采用Socket原理、线程池、输入输出流及简单的HTTP协议,麻烦虽小,五脏俱全,...JAR编译的JDK版本1.6,至少要JDK1.5以上,因为其中用到JDK自带的线程池,内附源码,用户可以自已将源码再打包。 下载路径为:
普通JDK自带的线程池时无法实现线程池的自动切换,基于监控与上下文自动切换的需求,封住了一套taxi开头的线程池,接入方式很简单,它的使用方式与Jdk的使用基本方式一致,只需在对应的类前加一个Taxi,现将对应方式...
JDK提供了一系列的线程池实现,包括`ThreadPoolExecutor`、`ScheduledThreadPoolExecutor`以及`Executors`工厂类。`ThreadPoolExecutor`是线程池的核心实现,它接受五个参数进行初始化: 1. `corePoolSize`: 核心...
- **并发工具库增强**:增加了 ExecutorService 接口和一系列实现类,使得线程池的管理更加简单易用。 - **集合框架增强**:新增了并发集合类,如 ConcurrentHashMap 和 CopyOnWriteArrayList,提高了多线程环境下的...
RejectedExecutionHandler 的实现 JDK 自带的默认有 4 种: * AbortPolicy:丢弃任务,抛出运行时异常 * CallerRunsPolicy:由提交任务的线程来执行任务 * DiscardPolicy:丢弃这个任务,但是不抛异常 * ...
这涉及到使用JDK自带的工具如`jstat`、`jmap`、`jhat`和`jfr`(Java飞行记录器)等。 4. **垃圾回收**:垃圾回收是Java性能管理的重要方面,指南提供了关于不同垃圾收集器的详细信息,如G1、Shenandoah、ZGC等,...
MyEclipse自带的JDK可能不是你想要使用的版本,或者你可能希望针对特定项目使用不同的JDK。在Tomcat配置界面,选择“JRE”选项卡,点击“Add”按钮。在弹出的窗口中,浏览并选择你系统中安装的JDK路径,然后点击...
在介绍Java泥潭问题时,文档提到了Runtime.getRuntime().exec()的不稳定性和JDK自带的Timer类的使用场合,以及池的合理设计,例如对象池、线程池和连接池的设计。还特别提醒了JDK1.5线程池和Timer使用的陷阱。 最后...
常用的线程池有两种:JDK 自带的和 Spring 线程池。 在本文中,我们使用 Spring API 来构建一个线程池。线程池可以避免线程无限制的被创建,避免应用资源无限制的被占用导致的系统宕掉的问题。 三、异常的捕获 当...
Java自带的并发框架通过提供高级的并发工具和类,使开发者能够更安全、更高效地编写多线程程序,避免了直接操作底层并发原语带来的复杂性和潜在风险。通过理解和熟练使用这些工具,我们可以构建出更健壮、更具伸缩性...
5. JDK自带的jvisualvm工具可以提供CPU监控、内存分析、线程检查等多方面信息,因此答案是D,都可以。 6. 这段代码涉及到Java的嵌套类。在外部类中直接创建内部类的对象,会先执行外部类的构造器,然后是内部类的...
- 使用JDK自带的`jstack`工具:通过命令行执行`jstack <pid>`,其中`pid`是Java进程的ID,可以得到应用程序的Thread Dump。 - 异常触发:某些情况下,连续三次按下Ctrl+Break(Windows)或Ctrl+\(Unix/Linux)...