0 0

关于java线程池的疑惑3

在网上看到一些线程池的实现方案,是首选创建一定数量的线程,直接start后,然后wait
其中线程中的run方法的代码如下
synchronized(queue) {   //任务队列
                if(!queue.isEmpty()) {  
                    Task task = queue.poll();  
                    task.execute();  
                }else {  
                    try {  
                        queue.wait(1000);                           System.out.println(Thread.currentThread() + " wait...");  
                    }catch(InterruptedException e) {  
                          
                    }  
                }  
            }  
当加入新的任务时
synchronized(taskQueue) {  
            taskQueue.add(task);  
            taskQueue.notify();  
        }  

我的理解就是 线程服务完后就wait,当有新的任务来时notify是线程继续执行新的任务。
这样线程不会重复创建。
但是我在jdk包里面的ThreadPoolExecutor类中线程池使用一个实现了runnable接口的worker来服务新的任务,
但是服务的时候都是通过new Thread(worker)来创建新的线程,直接调用start,那么这是不是为每个新的任务都
创建了一个线程,开销不是很大吗?
问题补充:
刚才源码看错了 呵呵,原来创建的每个thread 还是会去取task执行的
问题补充:
不过现在感觉有2种
一种是主动找任务。
一种是被动找任务,当任务来的时候,使用notify和wait。

的确是延迟创建好

2009年10月13日 17:34

1个答案 按时间排序 按投票排序

0 0

ThreadPoolExecutor只是到真正有任务来时才创建线程,而不是一开始就创建一批线程在运行,延迟创建线程当然更好

2009年10月13日 17:37

相关推荐

    java常见疑惑与陷阱

    ### Java常见疑惑与陷阱 #### 一、Java基础的常见陷阱 **1.1 不一样的数字的宽类型和窄类型** 在Java中,当我们处理不同的数值类型时,可能会遇到一些意料之外的行为。例如,当一个`byte`类型的数据与一个`int`...

    解决java中的疑惑

    在Java编程语言中,有很多细节和特性可能会...通过深入学习和实践,初学者可以逐渐克服这些疑惑,成为一名熟练的Java开发者。"JAVA解惑.pdf"这份文档很可能详细阐述了这些问题,建议仔细阅读,以便更好地理解Java编程。

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和...以上知识点只是《Java解惑》中的一部分,通过深入学习和实践,你可以逐步解开Java编程中的种种疑惑,成为一名更优秀的Java开发者。

    java编程思想练习答案 the think in Java Annotated Solution Guide

    《Java编程思想》是 Bruce Eckel 的经典之作,它深入浅出地介绍了Java这门强大的编程语言。...通过对照书本和答案,你可以独立完成练习,也可以查找疑惑,这对于学习和进阶Java编程都是非常有价值的资源。

    Java解惑中文

    描述中提到的“95个有关Java或其类库的陷阱和缺陷的谜题”,表明这本书可能是通过问题解答的形式来组织内容,每一个谜题都是一个特定的问题场景,可能是关于Java语言特性、API使用错误、内存管理、线程并发、性能...

    Java解惑

    《Java解惑》这篇博客文章及其配套的...通过学习《Java解惑》的相关内容,我们可以深化对Java编程的理解,解决实际开发中的疑惑,提升自己的编程技能。这份PDF文件很可能涵盖了以上提到的诸多主题,值得我们深入研究。

    疯狂java课后答案及代码

    这份资料旨在帮助Java初学者深化理解,巩固课堂所学,解决课后练习中的疑惑,同时也适合有一定基础的开发者进行自我提升。 在学习Java的过程中,理论知识和实践操作是相辅相成的。"疯狂Java"系列教程以其深入浅出、...

    全国计算机等级考试二级JAVA笔试试题

    8. **多线程**:线程的创建方式(Thread类和Runnable接口),线程同步(synchronized关键字、wait()、notify()方法)、线程池的使用。 9. **反射机制**:Class类的应用,动态加载类,获取类的属性、方法,以及动态...

    study1010_bursttpf_java学习_源码.zip

    标题"study1010_bursttpf_java学习_源码.zip"暗示了这是一个关于Java编程语言的学习资源包,其中包含了源代码。"bursttpf"可能是某种项目或技术的缩写,但没有足够的信息来确切解释其含义。描述中的内容与标题相同,...

    Java开发实战1200例

    通过《Java开发实战1200例》的光盘源代码,读者可以跟随每个实例逐步学习,实践编程,遇到问题时可以直接查看或运行代码,从而快速解决疑惑,提升编程能力。这些实例是理论知识与实际操作的完美结合,对于初学者和有...

    java语言程序设计第10版(基础版&进阶版)课后编程题参考代码 .zip

    8. **Chapter 38**:可能是关于高级话题,如反射、注解、枚举等,这些内容让Java具有了更强大的动态性。 每个章节的编程题参考代码都提供了示例解决方案,帮助读者理解和应用所学知识。通过分析和运行这些代码,...

    《Java2实用教程》(第三版)课后习题答案.rar

    这份《Java2实用教程》(第三版)课后习题答案PDF文档,可以帮助读者更有效地解决学习过程中的疑惑,通过对照答案进行自我评估,加深对每个知识点的理解。"使用帮助.url"链接则提供了获取额外学习资源或教程的指引,有...

    Java2实用教程(第三版)课后习题参考答案

    8. **多线程**:理解线程的基本概念,掌握Thread类和Runnable接口的使用,线程同步机制(如synchronized关键字,wait()、notify()、notifyAll()方法),以及线程池的创建和管理。 9. **网络编程**:学习Socket编程...

    Java中遇到的问题和解决方案.docx

    - 面试过程中经常会被问到关于Java基础概念的问题,比如面向对象特性、异常处理机制等。 - **面向对象特性**包括封装、继承、多态等,这些都是Java开发的基础,需要熟练掌握。 - **异常处理**是考察开发者在编写...

    SSD3所有答案,为了大家谋福利

    解压缩后的文件名“SSD3所有答案”暗示了这是一份完整的解答集,可能包含了上述各个知识点的实例代码、解释和解答,对于学习者来说,这是一个宝贵的资源,可以用来检验理解,解决疑惑,加深对Java编程的理解。...

    ThinkinginJava第三版+第四版+参考答案

    5. **多线程篇**:讲解了Java的并发编程,包括线程的创建、同步机制(如synchronized关键字、wait/notify机制)、线程池的使用,以及并发工具类如Semaphore、CyclicBarrier等。 6. **输入/输出及网络编程**:涉及...

    scjp试题。rar

    - **Module5**:可能涵盖多线程和并发,包括线程创建、同步机制(synchronized关键字、wait/notify方法)、线程池等。 - **Module6**:可能涉及到Java内存模型、垃圾回收(Garbage Collection)、类加载机制和反射...

    最新scjp310-065题库

    SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition 6)是...为了顺利通过SCJP认证,除了做题库外,还应阅读官方文档,参考权威教材,以及参加在线讨论和解答疑惑,全面提升Java编程技能。

    qm-book:千米阅E库

    "QM书"是一个以Java技术为核心的编程学习资源库,标题中的"千米阅E库...通过深入学习和实践,你可以在Java的世界里游刃有余,解答那些关于编程的疑惑,就像标题中引用的诗句,尽管怀疑,但永远不要停止探索和学习。

    Thread线程的基础知识及常见疑惑点总结

    本文将探讨Thread线程的基础知识及其常见的疑惑点。 首先,我们需要了解线程的状态。Java定义了五种线程状态: 1. 创建(new):线程刚刚被实例化,尚未启动。 2. 运行(Runnable):线程已启动,可能在就绪...

Global site tag (gtag.js) - Google Analytics