`

线程方法 joine

    博客分类:
  • JAVA
 
阅读更多

 

Example1:

Java代码  收藏代码
  1. public class JoinTest implements Runnable{  
  2.       
  3.     public static int a = 0;  
  4.   
  5.     public void run() {  
  6.         for (int k = 0; k < 5; k++) {  
  7.             a = a + 1;  
  8.         }  
  9.     }  
  10.   
  11.     public static void main(String[] args) throws Exception {  
  12.         Runnable r = new JoinTest();  
  13.         Thread t = new Thread(r);  
  14.         t.start();        
  15.         System.out.println(a);  
  16.     }         
  17. }  

 请 问程序的输出结果是5吗?答案是:有可能。其实你很难遇到输出5的时候,通常情况下都不是5。当然这也和机器有严重的关系。为什么呢?我的解释是当主线程 main方法执行System.out.println(a);这条语句时,线程还没有真正开始运行,或许正在为它分配资源准备运行。因为为线程分配资源需要时间,而main方法执行完t.start()方法后继续往下执行System.out.println(a);,这个时候得到的结果是a还没有被 改变的值0 。怎样才能让输出结果为5!其实很简单,join() 方法提供了这种功能。join() 方法,它能够使调用该方法的线程在此之前执行完毕。

Java代码  收藏代码
  1. public static void main(String[] args) throws Exception {  
  2.         Runnable r = new JoinTest();  
  3.         Thread t = new Thread(r);  
  4.         t.start();        
  5.         t.join(); //加入join()  
  6.         System.out.println(a);  
  7.     }     

 这个时候,程序输入结果始终为5。

分享到:
评论

相关推荐

    Java线程之join_动力节点Java学院整理

    Java线程中的`join()`方法是一个非常重要的同步工具,它允许一个线程(通常为主线程)等待另一个线程(子线程)执行完成后再继续执行。`join()`方法定义在`java.lang.Thread`类中,它使得多线程间的协作更加有序。 ...

    Java线程中yield与join方法的区别Java开发J

    在Java多线程编程中,理解并正确使用`yield`和`join`方法是至关重要的。这两个方法都属于线程控制策略的一部分,但它们的作用和使用场景有所不同。 首先,我们来详细探讨`Thread.yield()`方法。这个方法的目的是让...

    JAVA多线程操作方法实用大全

    `join()`方法用于等待指定线程结束。调用`join()`的线程会挂起,直到被`join()`的线程执行完毕。例如: ```java Thread thread = new Thread(new Runnable() { @Override public void run() { // 执行代码 } })...

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、notifyAll()用法 wait()、notify()和notifyAll()是Object类...

    VS2008 C# 创建线程,根据按钮可以控制线程的运行情况。

    创建线程后,调用`Start()`方法启动它,而`Join()`方法用于等待线程完成。此外,`IsAlive`属性可以用来检查线程是否仍在运行。 在VS2008中,创建一个Windows Forms项目,然后添加所需的控件,如Button和Label,以...

    java多线程例子

    在 main 方法中,我们使用 join() 方法来等待 TestThread 线程的结束,然后输出当前线程的名称和状态。 Java 多线程是一种非常有用的技术,它可以提高程序的性能和效率。但是,使用多线程也需要注意一些问题,例如...

    多线程使用操作大全

    本文主要围绕多线程在Java中的使用展开,深入探讨了线程控制的基本方法及其应用场景,并提供了具体的示例代码来帮助理解。主要包括线程的生命状态检查、优先级管理、线程间通信以及一些重要的线程控制函数如`sleep()...

    多线程之06三种中止线程的方法比较.docx

    - 如果线程在调用`wait`、`join`或`sleep`等方法时被阻塞,那么`interrupt()`方法将触发异常,中断状态将被清除,同时线程有机会优雅地处理此异常。 - 如果线程被I/O或NIO中的Channel所阻塞,同样可以通过中断操作...

    vb多线程演示代码

    4. Join:等待指定线程完成。 5. Sleep:让当前线程暂停一段时间,释放CPU资源。 四、线程优先级 VB中的Thread类允许设置线程的优先级,但应谨慎使用,因为不恰当的优先级设置可能导致优先级反转和饥饿问题。线程...

    多线程执行完后主程序再执行(包括需要子线程返回结果)

    为解决这个问题,我们需要使用同步机制,如Java中的`join()`方法或C#的`Thread.Join()`,让主线程等待所有子线程完成后再继续执行。当调用`join()`方法时,主线程会被阻塞,直到被调用的线程执行完毕。 例如,在...

    Java线程超时监控

    在这种情况下,`join`方法会让调用线程等待,直到目标线程结束或超时。如果超时,当前线程将恢复执行,并且可以通过调用`interrupt`来中断目标线程(但这并不意味着目标线程会立即停止,它可能需要在内部检查`...

    vb.net多线程例子

    `Join`方法可以等待线程结束,`Abort`可以强制终止线程(但应谨慎使用),而`IsAlive`则检查线程是否仍在运行。`AutoResetEvent`和`ManualResetEvent`等信号量可以帮助线程间进行通信,等待特定事件发生。 总的来说...

    C#(asp.net)多线程用法示例(可用于同时处理多个任务)

    `Thread.Join()`方法则用来等待指定线程结束,确保主线程不会在子线程完成之前继续执行。 需要注意的是,当在ASP.NET环境中使用多线程时,必须谨慎处理资源的同步问题,因为Web应用程序的请求是异步的,多个线程...

    Java多线程实现异步调用实例

    `Thread.join()`可以让主线程等待子线程完成后再继续执行。 “异步”标签则涉及到了程序设计中的非阻塞特性,有助于提升系统的并发能力和响应性。Java 8引入的CompletableFuture提供了一种更高级的异步编程模型,...

    关于异步线程的例子

    3. 可以使用 `Join()` 方法等待线程完成,或者使用 `IsAlive` 属性检查线程状态。 以下是一个使用 `Thread` 的简单示例: ```csharp private void btnStart_Click(object sender, EventArgs e) { Thread thread =...

    java中终止一个线程的方法总结(精)

    `Thread.interrupt()`方法会设置线程的中断状态,并在当前线程调用`wait()`, `join()`, 或 `sleep()`时抛出`InterruptedException`。但在线程执行普通逻辑时,如循环或赋值操作,`interrupt()`并不会影响线程的执行...

    vb.net 2005 多线程

    2. `Join`:等待线程完成。主线程会暂停,直到目标线程结束。 3. `IsAlive`:检查线程是否仍在运行。 四、线程优先级 线程有不同优先级,可以使用 `Thread.Priority` 属性设置。但要注意,操作系统可能不会严格...

    java多线程实例

    - `join()`:让当前线程等待指定线程结束后再继续执行。 - `sleep(long mills)`:使当前线程暂停指定毫秒数。 - `yield()`:让当前线程暂停,让其他同优先级的线程有机会执行。 - `interrupt()` 和 `isInterrupted()...

    15个多线程问题集锦

    当一个线程调用另一个线程的`join()`方法时,调用线程将被阻塞直到被加入的线程完全执行完毕。因此,可以通过如下方式来实现: ```java T1.start(); T1.join(); // 确保T1先执行 T2.start(); T2.join(); // ...

    JAVA 多线程的两点误区

    - 如果想要确保线程已经完成某些操作(如修改字符串值),可以使用同步机制,比如`join()`方法或显式的锁。 - 使用`join()`可以让主线程等待子线程结束后再继续执行。例如: ```java returnThreadInfo.start(); ...

Global site tag (gtag.js) - Google Analytics