java线程池,首先看一下构造方法
解释一下参数的意义
corePoolSize 核心线程数
maximumPoolSize 最大线程数,
keepAliveTime 线程中超过核心线程数的空闲线程最大存活时间
unit 存活时间的单位
workQueue 线程队列类型
Executors.defaultThreadFactory() 构造线程的工厂类
defaultHandler 超过线程队列大小的时候,默认拒绝接受线程的handler类
这几个参数的意思,等一会分析源码的时候一并解释
提交到线程池执行的是execute方法,里面传入一个线程类
执行超类的super.execute方法
首先判定先有线程数是否大于核心线程数,如果不大于(小于),执行或运算后方法addIfUnderCorePoolSize方法
再次判定当前线程数小于核心线程数,并且线程池是运行状态,执行addThread方法,将任务放进去
首先新建一个worker,利用线程工厂创建一个线程,并将worker作为参数传入进去,看一下threadFactory.newThread方法
这里面也就是返回的thread在运行的时候,调用传递过来的runnable接口,即是worker运行
这也就是在addThread方法后,最后调用了t的start即可
返回去,继续看execute方法的第二个if,在当前线程大于核心线程数,直接进入第二个if语句,判定runState是否是运行状态并且如队列成功
再次判定,是否线程池已经不执行了,或者当前线程数等于0,则执行ensureQueuedTaskHandled,该方法
只要不在运行中或者入队列失败,则执行addIfUnderMaximumPoolSize方法
该方法和addIfUnderCorePoolSize方法类似,判定当前线程小于最大线程数并且线程池运行状态,然后进行addThread操作
如果这个时候,还是没有入队列成功,则执行reject来拒绝任务
回到addThread方法,该方法最后执行了t.start方法,这个t是threadFactory.newThread(w)产生的,该方法又执行了w也就是worker的run方法,
worker的run方法
用getTask来获取队列中的商品
jdk1.7的版本,用了大量的atomicInteger来判定当前线程数量和执行的状态,其中addWorker方法中的new worker在构建的时候,就生成了新的thread,并将执行的任务丢到worker中的thread中
相关推荐
9. **并发编程工具**:提供了一系列的并发编程工具,如`java.util.concurrent`包,包含线程池、并发容器和并发工具类,方便开发者构建高并发应用。 10. **JMX (Java Management Extensions)**:增强了对Java应用...
3:对线程池的基本使用及其部分源码的分析(注意:这里的源码分析是基于jdk1.6;) a:线程池的状态 volatile int runState; static final int RUNNING = 0; 运行状态 static final int SHUTDOWN = 1; 关闭状态;...
环境:Windows XP Professional SP3, JDK 1.6 使用步骤: 1.下载解压之后,在控制台运行javac ThreadPoolTest.java 2.然后根据提示运行java命令执行示例程序,观看线程池的运行结果 目标:Java中多线程技术是一个...
例如,`java.util.concurrent`包在并发编程中提供了高级工具,如线程池、锁和并发集合,通过源码可以学习到它们的内部工作机制。 3. **异常处理**:源码中展示了如何使用try-catch-finally结构来捕获和处理异常,...
4. **并发编程增强**:加入了`java.util.concurrent`包,提供了线程池、并发集合等高级并发工具,提升了多线程编程的效率和可管理性。 5. **NIO.2**:新I/O(New I/O)API在1.6版本中进一步完善,提供了文件系统...
10. **并发工具类**:Java并发包(java.util.concurrent)在1.6版本中进一步增强,包括新的并发数据结构(如ConcurrentHashMap)和线程池API(ExecutorService),帮助开发者编写高效的多线程程序。 11. **安全增强...
5. **多线程**:`java.lang.Thread`类和`java.util.concurrent`包提供了多线程编程的支持,包括线程的创建、同步控制、线程池管理等。 6. **日期和时间**:在Java 1.6中,`java.util.Date`和`Calendar`类是处理日期...
4. **多线程**:Java API 1.6对多线程支持更加成熟,Thread类和Runnable接口是创建线程的基础,同时提供了synchronized关键字、wait/notify机制、线程池(ExecutorService)等高级特性,确保并发编程的可控性和效率...
2. `java.util.concurrent`:并发工具包,包含线程池、同步容器、并发集合等,简化多线程编程。 3. `java.awt`和`javax.swing`:图形用户界面(GUI)编程的支持,用于创建桌面应用。 4. `java.sql`:数据库连接和...
3. **并发(Concurrency)**:1.6版本对并发库进行了大量优化,包括`java.util.concurrent`包,它提供了线程池、同步工具类如Semaphore、CountDownLatch和CyclicBarrier,以及高级并发数据结构如ConcurrentHashMap等...
2. **线程池**:Tomcat 1.6引入了线程池管理,允许更有效地处理并发请求,提高了服务器的响应速度和整体性能。 3. **连接器优化**:NIO(非阻塞I/O)连接器提供了一种更高效的I/O模型,特别是在高并发环境中。 4. ...
5. **并发编程增强**:增加了`java.util.concurrent`包,提供了线程池、并发集合、原子变量等高效并发工具类,使得多线程编程更为简便和安全。 6. **脚本引擎支持**:通过`javax.script`包,Java 1.6支持JavaScript...
【标题】"Tomcat7, 正常, 可用, 需要JDK1.6版本" 暗示了我们讨论的核心是Apache Tomcat服务器的第七个主要版本,一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用服务规范。此版本的Tomcat被认为稳定...
10. **并发工具**:Java Concurrency Utilities在1.6版本中进一步丰富,包含更多的并发集合类和线程池API,帮助开发者更好地编写多线程应用。 11. **日志改进**:java.util.logging框架得到提升,提供了更强大的...
3. **多线程**:Java 1.6中的Thread类和synchronized关键字,以及Runnable接口,为并发编程提供了基础,同时新增了java.util.concurrent包,包含了线程池、并发集合等高级工具。 4. **网络编程**:Socket、...
- **Executor框架**:提供了更强大的线程池管理功能。 - **并发工具类**:新增了如`ConcurrentHashMap`、`ConcurrentLinkedQueue`等并发集合类。 - **安全性和加密**: - **加密API**:引入了更多的加密算法支持...
1. **java.util.concurrent**:这个包包含了大量的并发工具类,如线程池、并发集合等,有助于编写高效的多线程程序。 2. **java.nio**:非阻塞I/O包,提供通道(Channels)和选择器(Selectors),用于高效率的I/O...
例如,增强的并发工具包`java.util.concurrent`提供了线程池、同步器和并发容器,帮助开发者更高效地编写多线程程序。 在性能方面,JDK 1.6的HotSpot JVM引入了Client和Server两种模式,分别针对桌面应用和服务器...
【标题】:“Tomcat 1.6”是一个关于Apache Tomcat服务器早期版本的讨论,这里主要聚焦于Tomcat 6.0.18这一特定发行版。 【描述】:Apache Tomcat是Apache软件基金会的一个开源项目,它是一个实现了Java Servlet和...
- 1.6版本强化了并发工具类库,如`java.util.concurrent`包,提供了线程池、Future、Callable和CyclicBarrier等工具,便于多线程编程。 - 1.8版本中,Fork/Join框架的引入进一步优化了并行计算,使得大型任务可以...