在网上看到一些线程池的实现方案,是首选创建一定数量的线程,直接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。
的确是延迟创建好
相关推荐
### Java常见疑惑与陷阱 #### 一、Java基础的常见陷阱 **1.1 不一样的数字的宽类型和窄类型** 在Java中,当我们处理不同的数值类型时,可能会遇到一些意料之外的行为。例如,当一个`byte`类型的数据与一个`int`...
在Java编程语言中,有很多细节和特性可能会...通过深入学习和实践,初学者可以逐渐克服这些疑惑,成为一名熟练的Java开发者。"JAVA解惑.pdf"这份文档很可能详细阐述了这些问题,建议仔细阅读,以便更好地理解Java编程。
《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和...以上知识点只是《Java解惑》中的一部分,通过深入学习和实践,你可以逐步解开Java编程中的种种疑惑,成为一名更优秀的Java开发者。
《Java编程思想》是 Bruce Eckel 的经典之作,它深入浅出地介绍了Java这门强大的编程语言。...通过对照书本和答案,你可以独立完成练习,也可以查找疑惑,这对于学习和进阶Java编程都是非常有价值的资源。
描述中提到的“95个有关Java或其类库的陷阱和缺陷的谜题”,表明这本书可能是通过问题解答的形式来组织内容,每一个谜题都是一个特定的问题场景,可能是关于Java语言特性、API使用错误、内存管理、线程并发、性能...
《Java解惑》这篇博客文章及其配套的...通过学习《Java解惑》的相关内容,我们可以深化对Java编程的理解,解决实际开发中的疑惑,提升自己的编程技能。这份PDF文件很可能涵盖了以上提到的诸多主题,值得我们深入研究。
这份资料旨在帮助Java初学者深化理解,巩固课堂所学,解决课后练习中的疑惑,同时也适合有一定基础的开发者进行自我提升。 在学习Java的过程中,理论知识和实践操作是相辅相成的。"疯狂Java"系列教程以其深入浅出、...
8. **多线程**:线程的创建方式(Thread类和Runnable接口),线程同步(synchronized关键字、wait()、notify()方法)、线程池的使用。 9. **反射机制**:Class类的应用,动态加载类,获取类的属性、方法,以及动态...
标题"study1010_bursttpf_java学习_源码.zip"暗示了这是一个关于Java编程语言的学习资源包,其中包含了源代码。"bursttpf"可能是某种项目或技术的缩写,但没有足够的信息来确切解释其含义。描述中的内容与标题相同,...
通过《Java开发实战1200例》的光盘源代码,读者可以跟随每个实例逐步学习,实践编程,遇到问题时可以直接查看或运行代码,从而快速解决疑惑,提升编程能力。这些实例是理论知识与实际操作的完美结合,对于初学者和有...
8. **Chapter 38**:可能是关于高级话题,如反射、注解、枚举等,这些内容让Java具有了更强大的动态性。 每个章节的编程题参考代码都提供了示例解决方案,帮助读者理解和应用所学知识。通过分析和运行这些代码,...
这份《Java2实用教程》(第三版)课后习题答案PDF文档,可以帮助读者更有效地解决学习过程中的疑惑,通过对照答案进行自我评估,加深对每个知识点的理解。"使用帮助.url"链接则提供了获取额外学习资源或教程的指引,有...
8. **多线程**:理解线程的基本概念,掌握Thread类和Runnable接口的使用,线程同步机制(如synchronized关键字,wait()、notify()、notifyAll()方法),以及线程池的创建和管理。 9. **网络编程**:学习Socket编程...
- 面试过程中经常会被问到关于Java基础概念的问题,比如面向对象特性、异常处理机制等。 - **面向对象特性**包括封装、继承、多态等,这些都是Java开发的基础,需要熟练掌握。 - **异常处理**是考察开发者在编写...
解压缩后的文件名“SSD3所有答案”暗示了这是一份完整的解答集,可能包含了上述各个知识点的实例代码、解释和解答,对于学习者来说,这是一个宝贵的资源,可以用来检验理解,解决疑惑,加深对Java编程的理解。...
5. **多线程篇**:讲解了Java的并发编程,包括线程的创建、同步机制(如synchronized关键字、wait/notify机制)、线程池的使用,以及并发工具类如Semaphore、CyclicBarrier等。 6. **输入/输出及网络编程**:涉及...
- **Module5**:可能涵盖多线程和并发,包括线程创建、同步机制(synchronized关键字、wait/notify方法)、线程池等。 - **Module6**:可能涉及到Java内存模型、垃圾回收(Garbage Collection)、类加载机制和反射...
SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition 6)是...为了顺利通过SCJP认证,除了做题库外,还应阅读官方文档,参考权威教材,以及参加在线讨论和解答疑惑,全面提升Java编程技能。
"QM书"是一个以Java技术为核心的编程学习资源库,标题中的"千米阅E库...通过深入学习和实践,你可以在Java的世界里游刃有余,解答那些关于编程的疑惑,就像标题中引用的诗句,尽管怀疑,但永远不要停止探索和学习。
本文将探讨Thread线程的基础知识及其常见的疑惑点。 首先,我们需要了解线程的状态。Java定义了五种线程状态: 1. 创建(new):线程刚刚被实例化,尚未启动。 2. 运行(Runnable):线程已启动,可能在就绪...