`
HelloSure
  • 浏览: 311104 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

多线程例子:join

 
阅读更多
package sure;

import java.util.Random;

public class MultThread {  

	    public static void main(String[] args) {
	        System.out.println("in " + Thread.currentThread().getName());
	        long start = System.currentTimeMillis();
	        CounterThread[] ct = new CounterThread[3];
	        for (int i = 0; i < ct.length; i++) {
	            ct[i] = new CounterThread();
	            ct[i].start();
//	            try {
//	                ct[i].join();
//	            } catch (InterruptedException e) {
//	                e.printStackTrace();
//	            }
	        }
	        long end = System.currentTimeMillis();
	        System.out.println("join total time = " + (end - start));
	        int result = 0;
	        for (int j = 0; j < ct.length; j++) {
	            result += ct[j].getResult();
	        }
	        System.out.println("the result is " + result);

	    }

	}

	class CounterThread extends Thread {

	    public CounterThread() {
	    }

	    private int result;

	    public int getResult() {
	        return result;
	    }

	    public void run() {
	        try {
	            int time = (new Random().nextInt() >>> 1) % 5000;
	            Thread.sleep(time);
	            System.out.println(Thread.currentThread().getName()
	                    + " is blocked for " + time + "ms");
	        } catch (InterruptedException ex) {

	        }
	        result = 5;
	    }
	}

控制台结果是:
in main
join total time = 0
the result is 0
Thread-2 is blocked for 897ms
Thread-0 is blocked for 1334ms
Thread-1 is blocked for 4623ms

运行的直观感受是:
前三行一瞬间就出来了,就是说main线程没有收到任何阻塞,一下子就运行结束了。
其实这个时候三个子线程也在运行,不过sleep的阻塞时间有长短,因此就一个一个的执行完打印出了后面三行。

但是如果把//那几行放开,则结果变为:
in main
Thread-0 is blocked for 4734ms
Thread-1 is blocked for 2307ms
Thread-2 is blocked for 4562ms
join total time = 11609
the result is 15

运行的直观感受是:
第一行出来之后过了4734ms出现第二行,又过了2307ms出现第三行,又过了4562ms后面都出来了。
其实这就表明了join()的用处,就是:
比如在main线程中调用thread-0.join(),那么main线程就会阻塞,等到thread-0执行结束之后再继续运行main线程。
因此这个例子的代码实现了一个多线程进行汇总的功能,很有意思。


再来一个例子,也可以帮助加深理解:
public class Test {
	public static void main(String[] args) {
		Thread t1 = new MyThread1();
		t1.start();

		for (int i = 0; i < 20; i++) {
			System.out.println("主线程第" + i + "次执行!");
			if (i > 2)
				try {
					// t1线程合并到主线程中,主线程停止执行过程,转而执行t1线程,直到t1执行完毕后继续。
					t1.join();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		}
	}
}

class MyThread1 extends Thread {
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("线程1第" + i + "次执行!");
		}
	}
}

控制台结果为:
线程1第0次执行!
线程1第1次执行!
线程1第2次执行!
线程1第3次执行!
线程1第4次执行!
线程1第5次执行!
主线程第0次执行!
线程1第6次执行!
主线程第1次执行!
主线程第2次执行!
主线程第3次执行!
线程1第7次执行!
线程1第8次执行!
线程1第9次执行!
主线程第4次执行!
主线程第5次执行!
主线程第6次执行!
主线程第7次执行!
主线程第8次执行!
主线程第9次执行!
主线程第10次执行!
主线程第11次执行!
主线程第12次执行!
主线程第13次执行!
主线程第14次执行!
主线程第15次执行!
主线程第16次执行!
主线程第17次执行!
主线程第18次执行!
主线程第19次执行!

在主线程第3次执行!之后,会先执行完线程1,再返回主线程进行执行。
分享到:
评论

相关推荐

    多线程例子 演示多线程使用

    这个“多线程例子”演示了如何在C++环境中实现多线程功能。下面我们将深入探讨多线程的基本概念、C++中的线程库以及如何创建和管理线程。 1. **多线程概念**:在单核CPU中,多线程是通过时间片轮转的方式实现的,即...

    java多线程例子

    Java 多线程例子 Java 多线程是 Java 编程语言中的一种基本概念,它允许程序同时执行多个任务,从而提高程序的性能和效率。本文将通过三个实用的例子,讲解 Java 多线程的基本概念和使用方法。 第一个例子:创建多...

    多线程编程例子

    本项目名为"多线程编程例子",旨在帮助初学者理解并实践Linux环境下的多线程编程。 首先,我们来探讨多线程的基本概念。在单线程程序中,任务是按顺序执行的,而多线程则允许多个任务同时执行,提高了系统资源的...

    C++多线程例子

    本教程将深入探讨C++中的多线程编程,并提供一个基础的例子。 C++11标准引入了对多线程的支持,通过`&lt;thread&gt;`库提供了线程创建、同步和通信等功能。在C++11之前,多线程通常依赖于平台特定的API,如POSIX的`...

    vb.net多线程例子

    总的来说,VB.NET的多线程功能强大且易于使用,对于初学者来说,通过简单的例子学习多线程是一个很好的起点。不过,随着项目复杂性的增加,理解并掌握线程管理、同步和通信机制至关重要,这将有助于编写出更加健壮和...

    C# 多线程实例多线程实例多线程实例

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...

    c++多线程编程的十个例子

    以下是对“C++多线程编程的十个例子”的详细讲解,这些例子将帮助你在Windows环境下深入理解和应用多线程。 1. **创建线程** C++11引入了`std::thread`库来创建和管理线程。例如,你可以通过传递函数或成员函数...

    pb 最简单的多线程例子

    在这个"pb最简单的多线程例子"中,我们可能会看到如何在PowerBuilder中创建和管理线程的基本步骤,以及如何处理线程间的交互和同步。通过分析“multithread.pbl”和“multithread.pbt”(项目文件)的内容,我们可以...

    很不错的多线程的例子

    标题"很不错的多线程的例子"和描述"VC++很不错的多线程的实例"都指向了一个关键点:如何在VC++中有效地实现多线程。 多线程是现代操作系统中的一个核心特性,它允许一个进程内同时运行多个独立的执行线程。在VC++中...

    C#多线程排序例子

    本示例“C#多线程排序例子”聚焦于如何利用多线程来提升排序操作的速度。 首先,让我们了解什么是多线程。在计算机程序中,线程是程序执行的基本单元,每个线程都有自己的执行路径。在单线程环境中,代码按顺序执行...

    常用多线程模板与鱼刺类多线程线程池应用小例子

    本篇文章将详细探讨“常用多线程模板”以及“鱼刺类(Fork/Join框架)多线程线程池”的应用,结合具体的代码实例来帮助理解这些概念。 首先,多线程是指在一个程序中同时执行多个不同的线程,以实现并行处理。在...

    VB 多线程例子学习

    VB多线程的例子学习是开发者提升技能的重要途径,尤其对于处理长时间运行的操作,如网络通信、大数据处理、用户界面更新等场景,多线程显得尤为重要。 在VB中实现多线程,可以借助两种主要的方法:一是通过...

    linux下的多线程例子

    在Linux操作系统中,多线程编程是一种常见的技术,它允许程序在同一时间执行多个并发线程。...这个"linux多线程例子"是学习和实践的好材料,通过实际操作和分析,你可以深入理解多线程的工作原理。

    基于python的多线程例子,详细介绍了多线程处理

    在这个基于Python的多线程例子中,我们将深入探讨如何创建和管理线程,以及如何利用它们来优化代码性能。 首先,`threadftp.py`很可能是一个演示如何在多线程环境中执行FTP(文件传输协议)操作的脚本。在Python中...

    一个简单的多线程例子,启动线程与终止线程。

    总之,这个简单的多线程例子展示了创建、启动和停止线程的基本步骤。通过理解和实践这些概念,开发者可以更好地设计和优化多线程应用程序,以满足高并发环境的需求。在深入学习多线程时,还要关注线程安全、性能优化...

    多线程测试(是多线程的测试,对学习多线程的朋友有用)

    在编程领域,多线程是一种常见的技术,它允许程序同时执行多个任务,从而提高系统效率和响应速度。尤其是在处理大量数据、并发操作或者需要进行IO等待时,多线程显得尤为重要。C#作为.NET框架的一部分,提供了丰富的...

    java 多线程小例子 很方便 很实用 适合初学者

    ### Java多线程小例子详解 #### 知识点一:基本多线程示例 在给定的代码示例中,我们首先看到的是一个简单的Java多线程应用实例。这个例子展示了如何创建并启动一个新的线程。在`ThreadDemo`类的`main`方法中,...

    多线程BUFFER例子

    本示例“多线程BUFFER例子”是通过C++实现的,展示了如何在缓冲区(BUFFER)中实现消费者与生产者的并发操作。下面将详细解释这个主题中的关键知识点。 首先,我们要理解什么是生产者-消费者问题。这是一个经典的...

    多线程经典例子

    标题"多线程经典例子"暗示我们将讨论一些多线程编程中的常见示例。以下是一些经典的应用场景: 1. **下载任务**:当需要从网络下载大文件时,可以创建多个线程分别负责不同部分的下载,这样可以显著加快下载速度。 ...

    多线程例子

    描述中的"多线程例子源码"可能包含了一个或者多个这样的示例,展示了如何启动线程、线程间的通信(如使用`join()`方法等待线程结束,或使用`synchronized`关键字实现同步)、线程的优先级设定、线程的生命周期管理...

Global site tag (gtag.js) - Google Analytics