- 浏览: 748361 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (419)
- 杂软粉墨 (2)
- 创意灵感 (3)
- 经验记录 (137)
- 开源轨迹 (2)
- sip-communicator (2)
- 闲侃杂谈 (8)
- 问题交流 (24)
- 概念模式 (32)
- 难点备案 (5)
- JwChat (1)
- 中国象棋 (1)
- 教育探索 (6)
- 英语研究 (58)
- 星际争霸 (1)
- 电信知识 (1)
- 软件架构 (3)
- 哲学探索 (26)
- 算法灵魂 (8)
- 近视探索 (6)
- 数学数学 (3)
- 牛角钻尖 (23)
- 至强文言 (3)
- 数据结构 (1)
- 宇宙物理 (2)
- 网络架构 (3)
- 游戏领域 (4)
- 图形处理 (2)
- 修炼之路 (8)
- 读书天地 (20)
- 编解乱码 (2)
- 概念探索 (8)
- 格物致知 (1)
- 其它语言 (1)
- 测试领域 (3)
- 文化风流 (1)
- JQuery (1)
- 網頁領域 (1)
- Unix/Linux (1)
- Inside JVM (1)
- 异常分析 (1)
最新评论
-
suyujie:
引用
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
iamzhoug37:
您能说一下"局部变量不受文本顺序限制" 是 ...
声明前为什么能赋值却不能输出,都是使用
多线程同时启动,执行完毕后启动新任务
1.传统join方式,等待所有线程执行完毕方才后续执行
public class ThreadTest { interface Task extends Runnable { Object getResult(); } public static void main(String[] args) throws InterruptedException { Task task1, task2, task3; task1 = new Task() { @Override public void run() { try { Thread.sleep(8000); System.out.println("t1 returns " + getResult()); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public Object getResult() { return 1; } }; task2 = new Task() { @Override public void run() { try { Thread.sleep(5000); System.out.println("t2 returns " + getResult()); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public Object getResult() { return 2; } }; task3 = new Task() { @Override public void run() { try { Thread.sleep(5000); System.out.println("t3 returns " + getResult()); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public Object getResult() { return 3; } }; Thread t1, t2, t3; t1 = new Thread(task1); t2 = new Thread(task2); t3 = new Thread(task3); t1.start(); t2.start(); t3.start(); t1.join(); t2.join(); t3.join(); System.out.println("All three threads have died"); } }
2.ExecutorService + Callable + Future
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; class CallableTest implements Callable<Integer> { private final long waitTime; private final int taskId; public CallableTest(long waitTime, int taskId) { this.waitTime = waitTime; this.taskId = taskId; } public Integer call() throws Exception { System.out.println("Hello, this is task: "+this.taskId); Thread.sleep(this.waitTime); return 1; } } public class Test { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(3); CallableTest task1 = new CallableTest(10*1000l, 1); CallableTest task2 = new CallableTest(8*1000l, 2); CallableTest task3 = new CallableTest(5*1000l, 3); Future<Integer> future1= executor.submit(task1); Future<Integer> future2= executor.submit(task2); Future<Integer> future3= executor.submit(task3); while(true){ if(future1.isDone() && future2.isDone() && future3.isDone()){ break; } } try { System.out.println("Return Value from task1: " + future1.get()); System.out.println("Return Value from task2: " + future2.get()); System.out.println("Return Value from task3: " + future3.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } System.out.println("All tasks finished"); } }
发表评论
-
java语言中classes分类
2012-10-22 13:09 1633local class的scope是local,所以在方法 ... -
URL definition
2012-08-14 08:29 7286http://reg.163.com/login.jsp?ty ... -
how to defend against serialization and reflection attack for eager singleton
2012-08-08 09:18 1302//为什么要定义构造方法 因为不定义它也会有默认构造方法,而 ... -
Finalizer Guardian Idiom
2012-05-30 11:55 1316Effective Java 2nd 中Item 7: A ... -
我對多態的理解
2012-05-24 09:03 1074多态(polymorphism)是以一种看待事物更细致的角度来 ... -
Bridge Pattern
2011-06-17 11:59 848Intent Decouple an abstracti ... -
Composite Pattern
2011-06-17 09:12 970http://userpages.umbc.edu/~ta ... -
Observer Pattern
2011-06-15 11:32 1095consistent communication model ... -
Factory Method
2011-05-27 23:46 1013how does the factory method pat ... -
Law of Demeter
2011-04-07 09:23 1066http://en.wikipedia.org/wiki/La ... -
Several thread-safe singleton collection
2011-02-24 10:19 10401. static inner class publi ... -
关于Arrays.sort()方法用到的设计模式
2011-02-18 09:12 2890/** * Src is the sour ... -
何时使用LSP
2011-01-24 09:12 1017当使用subclass无法满足LSP(Liskov Subst ... -
Command模式图详解
2011-01-12 16:53 973上图是command模式结构图,各个符号重点应该理解,符 ... -
IOC inversion体现在什么地方
2011-01-12 16:02 1071http://martinfowler.com/bliki/I ... -
什么时候需要synchronized
2010-12-02 15:32 1172当需要在某个方法上加synchronized关 ... -
Apache Struts2 Architecture
2010-07-21 22:38 986Struts is a flexible control la ... -
开闭原则
2010-03-15 13:58 974Closed for Modification; Op ... -
多态之RTTI
2010-01-21 16:58 1403所谓RTTI,是Runtime Type Informatio ... -
26 Hints for Agile Software Development
2009-11-23 16:14 101726 Hints for Agile Software Dev ...
相关推荐
在这个场景中,我们关注的是一个特定的多线程问题:A线程需要等待B线程和C线程执行完毕后再开始执行,同时避免A线程无休止地检查状态导致的CPU空耗。 首先,我们需要理解Java中线程间的协作机制。Java提供了多种...
- **并行队列(Concurrent Queue)**: 可以同时执行多个任务,任务的执行顺序不确定。 ### **2. GCD的使用方式** - **创建队列**: - `dispatch_queue_create`: 创建自定义队列。 - `dispatch_get_main_queue`: ...
例如,在一个基于线程池的应用程序中,可能需要确保所有的任务都已完成才能继续执行后续操作或者进行清理工作。本文将详细介绍如何使用.NET Framework中的`ThreadPool`类来实现这一功能。 #### 一、资源池简介 ...
Java 判断线程池所有任务是否执行完毕的操作 在 Java 中,判断线程池所有任务是否执行完毕是非常重要的操作。线程池是一种高效的并发编程方式,但是在使用线程池时,需要确保所有任务都已经执行完毕,以避免系统...
1、通过java调用Python命令执行datax任务调度 2、自动开始任务和调度结束关闭...3、如果我们在cmd使用命令调度,执行完毕后无法释放内存,会造成内存泄露不足,出现报错“Error occurred during initialization of VM”
执行完创建任务的命令后,可以通过查询user_jobs、dba_jobs_running、dba_jobs和all_jobs视图来查看当前用户、正在运行、已经执行完毕和系统中所有任务的状态和信息。 除了创建定时任务,DBA还可以通过DBMS_JOB包...
Future 是一个任务执行的结果,他是一个将来时,即一个任务执行,立即异步返回一个 Future 对象,等到任务结束的时候,会把值返回给这个 Future 对象里面。 ```java public class FutureDemo { // 创建一个容量为 ...
单次执行任务是最简单的一类任务,一旦执行完毕,任务将自行删除,不再参与后续的调度。这类任务通常用于一次性初始化或者执行特定操作后退出的情况。任务函数的基本结构包括三个部分: - **准备工作代码**:这部分...
同时,`QRunnable`的`setAutoDelete(true)`属性可以确保任务执行完毕后,其对象会被自动删除,释放资源。 解决假死问题的关键在于避免在主线程(GUI线程)中执行耗时操作。Qt的事件驱动模型使得主线程可以专注于...
在计算机操作系统领域,多任务处理是一项关键特性,它允许系统同时执行多个程序或任务。在传统的DOS(Disk Operating System)环境下,虽然其设计最初并未内置支持多任务,但通过一些特殊的编程技巧和第三方软件,...
线程是程序执行的最小单元,一个进程中可以有多个线程同时运行。Python的`threading`模块提供了创建和管理线程的功能。下面是一个简单的线程示例: ```python import threading def task(name): print(f"Thread {...
在Java多线程编程中,有时我们需要确保所有子线程执行完毕后再进行后续操作,例如在并发测试、数据聚合或资源清理等场景。本篇文章将详细介绍五种在Java中等待所有子线程执行完的方法。 ### 方法一:使用`sleep`...
多线程并行执行是指在同一个程序中同时运行多个线程,每个线程负责不同的任务,以实现任务的并发执行。这种技术可以充分利用多核处理器的优势,将CPU的计算能力最大化,从而提高程序的运行效率。在Java中,可以通过...
1. **多线程技术**:在计算机科学中,多线程是指在一个程序中同时运行多个独立的执行路径,每个路径称为一个线程。在下载软件中,多线程能够提高下载速度,因为它可以同时从服务器获取数据,而不是顺序地逐块下载。...
如果你的应用部署在多台服务器上,你可能需要在所有节点上进行上述检查,或者使用分布式协调工具(如Zookeeper或Redis)来同步任务状态。 6. 考虑并发执行:Quartz允许同一个Job并行执行,所以即使`...
从给定的文件信息来看,我们探讨的主题是Bash下的多任务处理,即如何在Bash脚本中实现并行任务执行。以下是对文件中提到的关键知识点的详细解析: ### Bash多任务处理基础 Bash作为Unix/Linux环境下的常用Shell,...
Java 中的多线程编程是非常重要的一部分,特别是在需要并发执行多个任务的情况下。然而,在某些情况下,我们需要等待所有子线程执行完毕后再继续执行主线程的剩余动作。这时,我们可以使用 Java 提供的 ...
一个任务执行完毕后,再返回到任务队列的起始位置,形成循环。第二是任务执行的原则,指的是任务的执行必须是顺序的,即在处理一个任务时不能穿插其他任务的执行。第三是系统独立设计的等待程序,能够有效编排程序,...
在延时执行中,回调函数可以在每次延时结束后执行,处理一些后续任务。例如,你可能希望在每次跳转前执行一些清理工作,或者在延迟执行函数后更新UI状态。 以下是一个简单的示例,展示了如何结合这些技术点实现延时...
本文将详细探讨如何在多线程环境中确保所有子线程执行完毕后,主程序再进行后续操作,并且如何获取子线程的返回结果。这涉及到线程的同步与通信,是理解并发编程的关键点。 首先,多线程执行时,主线程会创建并启动...