以下内容转载自:http://blog.csdn.net/wistronits/article/details/556035,用于学习、记录
run() 和start() 是大家都很熟悉的两个方法。把希望并行处理的代码都放在run() 中;stat() 用于自动调用run(),这是JAVA的内在机制规定的。并且run() 的访问控制符必须是public,返回值必须是void(这种说法不准确,run() 没有返回值),run()不带参数。
闲话少说,我们要讲的是join(),我们首先来看个例子:
代码:
/** * @author QingHe * Creation on 2005-12-19 */
public class ThreadTest implements Runnable { public static int a = 0;
public void run() { for (int k = 0; k < 5; k++) { a = a + 1; } }
public static void main(String[] args) throws Exception { Runnable r = new ThreadTest(); Thread t = new Thread(r); t.start(); System.out.println(a); } }
|
|
请问程序的输出结果是5吗?答案是:有可能。其实你很难遇到输出5的时候,通常情况下都不是5。当然这也和机器有严重的关系。为什么呢?我的解释是当主线程main方法执行System.out.println(a);这条语句时,线程还没有真正开始运行,或许正在为它分配资源准备运行吧。因为为线程分配资源需要时间,而main方法执行完t.start()方法后继续往下执行System.out.println(a);,这个时候得到的结果是a还没有被改变的值0。怎样才能让输出结果为5!其实很简单,join() 方法提供了这种功能。join() 方法,它能够使调用该方法的线程在此之前执行完毕。
代码:
/** * @author QingHe * Creation on 2005-12-19 */
public class ThreadTest implements Runnable { public static int a = 0;
public void run() { for (int k = 0; k < 5; k++) { a = a + 1; } }
public static void main(String[] args) throws Exception { Runnable r = new ThreadTest(); Thread t = new Thread(r); t.start(); t.join(); System.out.println(a); } }
|
|
这个时候,程序输入结果始终为5。
为了证明如果不使用t.join()方法,主线程main方法的System.out.println(a);语句将抢先执行,我们可以在main方法中加入一个循环,这个循环用来延长main方法执行的时间,循环次数将严重取决于机器性能。如果循环次数得当,我们也可以看到a的输出结果是5。
代码:
/** * @author QingHe * Creation on 2005-12-19 */
public class ThreadTest implements Runnable { public static int a = 0;
public void run() { for (int k=0; k<5; k++) { a = a + 1; } }
public static void main(String[] args) throws Exception { Runnable r = new ThreadTest(); Thread t = new Thread(r); t.start(); for (int i=0; i<300; i++) { /* 注意循环体内一定要有实际执行语句,否则编译器或JVM可能优化掉你的这段代码,视这段代 码为无效。 */ System.out.print(i); } System.out.println(); System.out.println(a); } }
|
|
分享到:
相关推荐
浅谈Java线程join方法使用方法 Java中的线程join方法是一种实现线程同步的方式,可以将原本并行执行的多线程方法变成串行执行的。在Java中,线程join方法的作用是使当前线程等待另一个线程的结束,然后再继续执行...
Java多线程join方法实例代码 Java多线程join方法是一种非常重要的技术,在Java并发编程中,线程的join方法可以使得一个线程等待另一个线程的执行完毕,然后继续执行。这种机制可以确保线程的正确执行顺序,避免了...
`join()`方法用于线程同步,当一个线程(例如线程A)调用另一个线程(例如线程B)的`join()`方法时,线程A会暂停执行,直到线程B完成其所有工作。这样可以确保线程A在继续执行之前等待线程B的完成,避免数据不一致或...
本文将深入解析`join()`方法,它是控制线程执行顺序和同步的重要手段。 1. **默认线程行为** Python默认情况下,创建的线程会与主线程同步执行。这意味着,无论主线程是否执行完毕,它都会等待所有子线程执行完毕...
一个线程join另一个线程,(包括和interrupt互动的用法)1---马克-to-win java视频
线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...
Java线程中的`join()`方法是一个非常重要的同步工具,它允许一个线程(通常为主线程)等待另一个线程(子线程)执行完成后再继续执行。`join()`方法定义在`java.lang.Thread`类中,它使得多线程间的协作更加有序。 ...
在Java多线程编程中,理解并正确使用`yield`和`join`方法是至关重要的。这两个方法都属于线程控制策略的一部分,但它们的作用和使用场景有所不同。 首先,我们来详细探讨`Thread.yield()`方法。这个方法的目的是让...
最后,Thread.Join方法是另一种简单的同步手段,它使得一个线程等待另一个线程完成后再继续执行。这在需要按特定顺序执行线程或者依赖其他线程的结果时非常有用。 综上所述,.NET框架提供了丰富的多线程同步机制,...
本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、notifyAll()用法 wait()、notify()和notifyAll()是Object类...
一个线程join另一个线程,(包括和interrupt互动的用法)3---马克-to-win java视频
一个线程join另一个线程,(包括和interrupt互动的用法)2---马克-to-win java视频
`join()`方法用于等待指定线程结束。调用`join()`的线程会挂起,直到被`join()`的线程执行完毕。例如: ```java Thread thread = new Thread(new Runnable() { @Override public void run() { // 执行代码 } })...
主要介绍了java 线程方法join简单用法,结合实例形式总结分析了Java线程join方法的功能、原理及使用技巧,需要的朋友可以参考下
Python_threading_3_join功能_(多线程_教学教程tutorial)
【Linux下的多线程编程方法】 在Linux操作系统中,多线程编程是实现高效并发执行的关键技术。自20世纪80年代中期以来,由于其节省资源和便捷的通信机制,多线程已被广泛应用于操作系统中。相较于进程,线程的创建和...
一 前言 温习python 多进程语法的时候,对 join的理解不是很透彻,本文通过代码实践来加深对 join()的认识。...join()方法可以在当前位置阻塞主进程,带执行join()的进程结束后再继续执行主进程的代码逻辑。 #
本文将深入探讨四个重要的线程控制方法:`start()`、`sleep()`、`join()` 和 `yield()`,以及它们在实际应用中的作用。 首先,`start()` 方法是启动线程的核心方法。当创建一个 `Thread` 类的实例或其子类时,线程...
当在一个线程上调用另一个线程的`join()`方法时,调用线程会被阻塞,直到被调用的线程结束。这意味着,主线程会暂停其执行流程,直到指定的线程执行完毕,然后才会继续执行`join()`之后的代码。 在提供的代码示例中...