主子线程

本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明:

1、使用Thread的join()方法,join()方法会阻塞主线程继续向下执行。

2、使用Java.util.concurrent中的CountDownLatch,是一个倒数计数器。初始化时先设置一个倒数计数初始值,每调用一次countDown()方法,倒数值减一,他的await()方法会阻塞当前进程,直到倒数至0。

本例中 主线程不光能和子线程 协同步调 也可以添加static变量 进行通讯

join方式代码如下:

[java] view plain copy

  1. package com.test.thread;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class MyThread extends Thread
  5. {
  6. public MyThread(String name)
  7. {
  8. this.setName(name);
  9. }
  10. @Override
  11. public void run()
  12. {
  13. System.out.println(this.getName() + " staring...");
  14. System.out.println(this.getName() + " end...");
  15. }
  16. /**
  17. * @param args
  18. */
  19. public static void main(String[] args)
  20. {
  21. System.out.println("main thread starting...");
  22. List<MyThread> list = new ArrayList<MyThread>();
  23. for (int i = 1; i <= 5; i++)
  24. {
  25. MyThread my = new MyThread("Thrad " + i);
  26. my.start();
  27. list.add(my);
  28. }
  29. try
  30. {
  31. for (MyThread my : list)
  32. {
  33. my.join();
  34. }
  35. }
  36. catch (InterruptedException e)
  37. {
  38. e.printStackTrace();
  39. }
  40. System.out.println("main thread end...");
  41. }
  42. }

运行结果如下:

main thread starting...
Thrad 2 staring...
Thrad 2 end...
Thrad 4 staring...
Thrad 4 end...
Thrad 1 staring...
Thrad 1 end...
Thrad 3 staring...
Thrad 3 end...
Thrad 5 staring...
Thrad 5 end...
main thread end...

时间: 2024-07-31 12:15:05

主子线程的相关文章

56 主子线程循环执行

public class Demo { public static Object o = new Object(); public static boolean flag = true; public static void main(String[] args) { Thread sub = new Thread(new Sub()); sub.start(); mainRun(); } public static void mainRun() { try { for (int i = 1;

C++拾遗--多线程:主线程与子线程的同步

C++拾遗--多线程:主线程与子线程的同步 前言 在多线程编程时,有时是需要要求主线程与子线程同步的. 正文 程序演示 下面的一个例子,演示了主线程与子线程之间的同步问题. 程序描述: 在主线程中,有一整型变量count,初始化为0.主线程把count的地址传递给开启的子线程,子线程打印获取的值,随后主线程递增count的值,再次开启另一个子线程,传递count的地址-- #include <stdio.h> #include <stdlib.h> #include <pro

C++拾遗--C++多线程引入

C++拾遗--C++多线程引入 前言 C++库文件也提供了对多线程的支持,主要包含头文件thread即可使用C++中的多线程.它的一些与多线程有关的方法和C语言不同.我们有必要来探讨下C++编程下如何使用多线程. 正文 1.示例 与C语言多线程引入相同,我们先看一个C++多线程的示例. #include <iostream> #include <thread> //C++中的多线程头文件 #include <Windows.h> using namespace std;

postMessage和sendMessage

参考:http://www.cnblogs.com/giggle/p/5350288.html(浅谈webWorker) http://blog.csdn.net/zha_zi/article/details/41677033 HTML5 中 postMessage sendMessage 用法 Web Workers----工作线程 Html5对多线程的支持.在 HTML5 中提出了工作线程(Web Workers)的概念.用于解决页面之间数据处理的多线程,加快数据处理.如同java中的Thr

各科基础详实

一. Java基础部分 1. JAVA的基本数据类型有哪些 ?  String 是不是基本数据类型 ? 2. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 3. Java有没有goto? 7 4. 说说&和&&的区别. 7 5. 在JAVA中如何跳出当前的多重嵌套循环? 7 6. switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 8 7. short s1 = 1; s1 = s1 + 1;有什么

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

201709018工作日记--线程状态的转换

先来张图: 线程在一定条件下,状态会发生变化: 1.新建状态(New):新创建了一个线程对象 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权. 3.运行状态(Running):就绪状态的线程获取了CPU,执行程序代码. 4.阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行.直到线程进入就绪状态,才有机会转到运行状态.阻塞的情况分三种:   (一).等

POSIX 线程详解(经典必看)

总共三部分: 第一部分:POSIX 线程详解                                   Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  2000 年 7 月 01 日 第二部分:通用线程:POSIX 线程详解,第 2部分       Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  20

线程的控制和线程池

一.WaitHandle: ”.Net 中提供了一些线程间更自由通讯的工具,他们提供了通过"信号"进行通讯的机制 可以通过ManualResetEvent,AutoResetEvent(他是在开门并且一个 WaitOne 通过后自动关门)来进行线程间的通讯 waitOne:    等待开门 Set:           开门 Reset:       关门 static void Main(string[] args) { ManualResetEvent mre = new Manu