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 多线程的基本概念和使用方法。 第一个例子:创建多...
本项目名为"多线程编程例子",旨在帮助初学者理解并实践Linux环境下的多线程编程。 首先,我们来探讨多线程的基本概念。在单线程程序中,任务是按顺序执行的,而多线程则允许多个任务同时执行,提高了系统资源的...
本教程将深入探讨C++中的多线程编程,并提供一个基础的例子。 C++11标准引入了对多线程的支持,通过`<thread>`库提供了线程创建、同步和通信等功能。在C++11之前,多线程通常依赖于平台特定的API,如POSIX的`...
总的来说,VB.NET的多线程功能强大且易于使用,对于初学者来说,通过简单的例子学习多线程是一个很好的起点。不过,随着项目复杂性的增加,理解并掌握线程管理、同步和通信机制至关重要,这将有助于编写出更加健壮和...
在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...
以下是对“C++多线程编程的十个例子”的详细讲解,这些例子将帮助你在Windows环境下深入理解和应用多线程。 1. **创建线程** C++11引入了`std::thread`库来创建和管理线程。例如,你可以通过传递函数或成员函数...
在这个"pb最简单的多线程例子"中,我们可能会看到如何在PowerBuilder中创建和管理线程的基本步骤,以及如何处理线程间的交互和同步。通过分析“multithread.pbl”和“multithread.pbt”(项目文件)的内容,我们可以...
标题"很不错的多线程的例子"和描述"VC++很不错的多线程的实例"都指向了一个关键点:如何在VC++中有效地实现多线程。 多线程是现代操作系统中的一个核心特性,它允许一个进程内同时运行多个独立的执行线程。在VC++中...
本示例“C#多线程排序例子”聚焦于如何利用多线程来提升排序操作的速度。 首先,让我们了解什么是多线程。在计算机程序中,线程是程序执行的基本单元,每个线程都有自己的执行路径。在单线程环境中,代码按顺序执行...
本篇文章将详细探讨“常用多线程模板”以及“鱼刺类(Fork/Join框架)多线程线程池”的应用,结合具体的代码实例来帮助理解这些概念。 首先,多线程是指在一个程序中同时执行多个不同的线程,以实现并行处理。在...
VB多线程的例子学习是开发者提升技能的重要途径,尤其对于处理长时间运行的操作,如网络通信、大数据处理、用户界面更新等场景,多线程显得尤为重要。 在VB中实现多线程,可以借助两种主要的方法:一是通过...
在Linux操作系统中,多线程编程是一种常见的技术,它允许程序在同一时间执行多个并发线程。...这个"linux多线程例子"是学习和实践的好材料,通过实际操作和分析,你可以深入理解多线程的工作原理。
在这个基于Python的多线程例子中,我们将深入探讨如何创建和管理线程,以及如何利用它们来优化代码性能。 首先,`threadftp.py`很可能是一个演示如何在多线程环境中执行FTP(文件传输协议)操作的脚本。在Python中...
总之,这个简单的多线程例子展示了创建、启动和停止线程的基本步骤。通过理解和实践这些概念,开发者可以更好地设计和优化多线程应用程序,以满足高并发环境的需求。在深入学习多线程时,还要关注线程安全、性能优化...
在编程领域,多线程是一种常见的技术,它允许程序同时执行多个任务,从而提高系统效率和响应速度。尤其是在处理大量数据、并发操作或者需要进行IO等待时,多线程显得尤为重要。C#作为.NET框架的一部分,提供了丰富的...
### Java多线程小例子详解 #### 知识点一:基本多线程示例 在给定的代码示例中,我们首先看到的是一个简单的Java多线程应用实例。这个例子展示了如何创建并启动一个新的线程。在`ThreadDemo`类的`main`方法中,...
本示例“多线程BUFFER例子”是通过C++实现的,展示了如何在缓冲区(BUFFER)中实现消费者与生产者的并发操作。下面将详细解释这个主题中的关键知识点。 首先,我们要理解什么是生产者-消费者问题。这是一个经典的...
标题"多线程经典例子"暗示我们将讨论一些多线程编程中的常见示例。以下是一些经典的应用场景: 1. **下载任务**:当需要从网络下载大文件时,可以创建多个线程分别负责不同部分的下载,这样可以显著加快下载速度。 ...
描述中的"多线程例子源码"可能包含了一个或者多个这样的示例,展示了如何启动线程、线程间的通信(如使用`join()`方法等待线程结束,或使用`synchronized`关键字实现同步)、线程的优先级设定、线程的生命周期管理...