请问一下jdk5自带的线程池的问题,我这几天仔细看了源码,有点我不是太明白

问题描述

一个work线程如果取不到任务,应该不会停止吧,应该变为空闲状态了是吗,代码里面是如果控制的呢,threadPoolexector代码里面是如何实现的能把一个线程弄成空闲状态啊,然后有任务过来还要把线程唤醒,我就是不知道代码里面是如何做到的,麻烦大家指点

解决方案

是通过BlockingQueue来实现的。开JDK源代码可以看到,ThreadPoolExecutor里定义了这么一个任务队列:private final BlockingQueue<Runnable> workQueue;所有的Worker线程的run方法里就是循环的从这个队列里取任务出来处理。而ThreadPoolExecutor的execute方法则会往这个队列里添加任务。任务其实就是待执行的Runnable对象。BlockingQueue的特性就是如果队列是空的话,所有从队列里取东西的线程都会被阻塞,直到有新东西入队或者被中断为止。所以,当没有任务的时候,所有的Worker线程都会阻塞在workQueue上,等待execute方法插入新的任务来唤醒。当队列满了的时候,所有向队列里塞东西的线程也都会被阻塞,直到队列腾出新的空位或者被中断为止。所以,当workQueue满了的时候,执行execute的线程也会被阻塞,等待Worker线程处理workQueue里的任务。BlockingQueue的具体信息:http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html

时间: 2024-10-01 18:12:14

请问一下jdk5自带的线程池的问题,我这几天仔细看了源码,有点我不是太明白的相关文章

Java自带的线程池简介

从 Java 5 开始,Java 提供了自己的线程池.线程池就是一个线程的容器,每次只执行额定数量的线程. java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.它很灵活,但使用起来也比较复杂,本文就对其做一个介绍. 首先是构造函数.以最简单的构造函数为例: public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit uni

jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】_jquery

本文实例讲述了jQuery实现带遮罩层效果的blockUI弹出层.分享给大家供大家参考,具体如下: 首先先附上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:

Java线程池的理论与实践

前段时间公司里有个项目需要进行重构,目标是提高吞吐量和可用性,在这个过程中对原有的线程模型和处理逻辑进行了修改,发现有很多基础的多线程的知识已经模糊不清,如底层线程的运行情况.现有的线程池的策略和逻辑.池中线程的健康状况的监控等,这次重新回顾了一下,其中涉及大量java.util.concurrent包中的类.本文将会包含以下内容: Java中的Thread与操作系统中的线程的关系 线程切换的各种开销 ThreadGroup存在的意义 使用线程池减少线程开销 Executor的概念 Thread

spring线程池-java线程,spring 线程池

问题描述 java线程,spring 线程池 大家好: 我现在有几个疑惑的地方 1.如果使用spring 线程池,或者java自带的线程池,那应用程序中的所有线程都 受到创建的这个线程池管理,还是只通过线程池.execute加进去的才被管理. 2.spring MVC 线程池threadPoolTaskExecutor 配置了最少活跃线程10个,最大10个, 那如果线程池中已经有10个活跃的线程在执行,如果继续往线程池中execute,此时的线程 是出于等待,还是直接挂掉,这个spring的线程

几种java线程池的实现算法分析

1. 前言 本文发表与infoq,因版权属于个人顾再此转载. 在阅读研究线程池的源码以前,只知道如何使用,不了解其内部实现的具体细节,一直感觉是非常高深的技术,研究后才发现,线程池的实现是如此精巧.本文从技术角度分析了线程池的本质原理和组成,同时分析了JDK.Jetty6.Jetty8.Tomcat的源码实现,对于想了解线程池本质.更好的使用线程池或者定制实现自己的线程池的业务场景具有一定指导意义. 2. 使用线程池的意义 l 复用:类似WEB服务器等系统,长期来看内部需要使用大量的线程处理请求

线程池threadpool

问题描述 threadPool.QueueUserWorkItem开启多个线程的时候,在调试阶段,程序没有跑完,我中途给短掉,在运行的时候,程序有时候就死了,好像在争夺资源,一直在死锁,请问有什么方法来清空线程池吗,或者有什么方法解决这个问题吗 解决方案 解决方案二:该回复于2012-03-31 09:03:00被版主删除解决方案三:线程池中,每个方法都调用了一个锁对象,我把这段改成单线程就不会出现上述现象了,但是这不是我想要的解决方法.我在想如果程序自己去跑,会出现这种情况吗,如果是定时循环调

消息队列 == 线程池 ? true : false

问题描述 消息队列 == 线程池 ? true : false 请问一下,消息队列是否和线程池相同,在看handler的详解时有点晕,弄不清,消息队列和线程池具体的功能了,请哪位大哥帮小弟,捋一捋,谢了! 解决方案 消息队列和线程池完全不同,消息队列通常是属于系统或者某个对象的,而线程池则是一种组织线程的手段,你可以写自己的线程调度算法来完成你的任务.所以两者是不同的东西. 解决方案二: 完全不同的东西,消息队列用于处理消息机制:线程池用于处理短期线程的业务

多线程之:几种线程池的实现算法分析

原文出自:http://www.infoq.com/cn/articles/thread-pool-algorithm-realization 1. 前言 在阅读研究线程池的源码之前,一直感觉线程池是一个框架中最高深的技术.研究后才发现,线程池的实现是如此精巧.本文从技术角度分析了线程池的本质 原理和组成,同时分析了JDK.Jetty6.Jetty8.Tomcat的源码实现,对于想了解线程池本质.更好的使用线程池或者定制实现自己的线程池 的业务场景具有一定指导意义. 2. 使用线程池的意义 复用

Java线程池架构原理和源码解析(ThreadPoolExecutor)

在前面介绍JUC的文章中,提到了关于线程池Execotors的创建介绍,在文章:<java之JUC系列-外部Tools>中第一部分有详细的说明,请参阅: 文章中其实说明了外部的使用方式,但是没有说内部是如何实现的,为了加深对实现的理解,在使用中可以放心,我们这里将做源码解析以及反馈到原理上,Executors工具可以创建普通的线程池以及schedule调度任务的调度池,其实两者实现上还是有一些区别,但是理解了ThreadPoolExecutor,在看ScheduledThreadPoolExe