`
duming115
  • 浏览: 114287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Thread 的join方法

阅读更多
1. Thread t的join()方法是指调用这个方法的Context线程,等待线程t结束,而不是t等待,加入到队列中。
2. main()方法由jvm的Main线程来调用,但是Main线程并不是一个守护(Deamon)线程,这个线程的信息可以通过在main中用Thread.currentThread()来获得.
3. 在main中执行其它线程的join()时应该注意,join()后,main线程会等待在那里,直接其等待的那个线程结束才会继续执行,这样如果还有其它线程与main正在等待的线程做交互,会让程序停在那里.


1. Thread t的join()方法是指调用这个方法的Context线程,等待线程t结束,而不是t等待,加入到队列中。
2. main()方法由jvm的Main线程来调用,但是Main线程并不是一个守护(Deamon)线程,这个线程的信息可以通过在main中用Thread.currentThread()来获得.
3. 在main中执行其它线程的join()时应该注意,join()后,main线程会等待在那里,直接其等待的那个线程结束才会继续执行,这样如果还有其它线程与main正在等待的线程做交互,会让程序停在那里.

import java.io.IOException;

public class TestJoin {
	static class SubThread extends Thread {
		private int loop;

		public SubThread(int loop) {
			this.loop = loop;
		}

		@Override
		public void run() {
			int count = 0;
			for (; count < loop;) {
				try {
					Thread.sleep(100);
					System.out.println(++count + getName());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			try {
				System.out.print(getName() + "Please input a ch: ");
				System.in.read();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		Thread[] array = new Thread[3];
		array[0] = new SubThread(10);
		array[1] = new SubThread(10);
		array[2] = new SubThread(10);
		for (Thread t : array) {
			t.start();
		}
		System.out.println("before join " + Thread.currentThread().getName());
		for (Thread t : array) {
			try {
				// 当前线程阻塞,等待t执行完成
				// t.join();
				// 当前线程(main线程)等待t0.5秒
				synchronized (t) {
					t.wait(50000);
				}
				System.out.println("after join");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		try {
			// 必须是要先
			synchronized (Thread.currentThread()) {
				Thread.currentThread().wait(10);
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("main ....");

	}
}

分享到:
评论

相关推荐

    关于C#中Thread.Join()的一点理解

    是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。  Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates  有两个主要问题: ...

    Java中Thread.join()的使用方法

    Java 中 Thread.join() 的使用方法 Thread.join() 是 Java 中的一个重要方法,该方法允许一个线程等待另一个线程的执行完成。下面我们将详细介绍 Thread.join() 的使用方法、源码分析和示例代码。 1. join() 的...

    c++11中关于std::thread的join的详解

    C++11中关于std::thread的join详解 C++11引入了std::thread库,提供了对多线程编程的支持。std::thread库提供了两个基本操作:join和detach。join操作用于回收线程资源,避免资源泄露;detach操作用于将线程与创建...

    C#多线程之Thread中Thread.Join()函数用法分析

    当NewThread调用Join方法的时候,MainThread就被停止执行, 直到NewThread线程执行完毕。 Thread oThread = new Thread(new ThreadStart(oAlpha.Beta)); oThread.Start(); while (!oThread.IsAlive) //表示线程当

    CountDownLatch与thread.join()的区别

    CountDownLatch与thread.join()的区别

    线程创建,线程等待与清除,thread_clean.c,thread_create.c,thread_create.c,thread_exit_struct.c,thread_id.c,thread_int.c, thread_join.c, thread_join.c, thread_string.c, thread_struct.c

    线程等待通常指的是一个线程(父线程)等待另一个线程(子线程)完成其工作,这通常通过`pthread_join()`函数实现,如`thread_join.c`所示。`pthread_join()`让调用线程阻塞,直到指定的线程结束。线程清除,或线程...

    java 中Thread.join()的使用方法

    在Java编程语言中,`Thread.join()`方法是一个非常重要的同步工具,它允许一个线程(调用者)等待另一个线程(被调用者)执行完成。`Thread.join()`的使用能够有效地解决多线程环境中的顺序执行问题,确保线程间的...

    浅谈java线程join方法使用方法

    浅谈Java线程join方法使用方法 Java中的线程join方法是一种实现线程同步的方式,可以将原本并行执行的多线程方法变成串行执行的。在Java中,线程join方法的作用是使当前线程等待另一个线程的结束,然后再继续执行...

    浅谈Java线程Thread.join方法解析

    Java线程Thread.join方法解析 Java线程中的join方法是一个非常重要的概念,它允许一个线程等待另一个线程的结束,以便进行后续的操作。在本篇文章中,我们将详细介绍Java线程Thread.join方法的解析和实现。 首先,...

    Java之Thread的join方法实例

    在Java多线程编程中,`Thread.join()`方法是一个非常重要的同步工具,它允许一个线程等待另一个线程结束执行后再继续执行。这个方法在处理并发控制和线程协作时非常有用,确保线程间的执行顺序。下面我们将深入探讨`...

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法、yield()方法、join方法、interrupt()方法

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...

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

    接着,我们来看`Thread.join()`方法。`join`方法的作用是等待指定线程执行完毕后再继续执行当前线程。它可以确保当前线程在调用`join`的线程执行完其所有任务后才继续执行,从而实现线程间的同步。`join`方法有一个...

    java基本教程之join方法详解 java多线程教程

    【Java多线程教程】- join方法深度解析 在Java多线程编程中,`join()`方法是一个关键的同步工具,它允许一个线程(通常为主线程)等待另一个线程(子线程)执行完毕后再继续执行。本文将详细探讨`join()`方法的原理...

    详解C++ thread用法总结

    C++11的标准类std::thread对线程进行了封装,定义了C++11标准中的一些表示线程的类、用于互斥访问的类与方法等。应用C++11中的std::thread便于多线程程序的移值。 std::thread类成员函数: (1)、get_id:获取线程ID...

    JAVA CountDownLatch与thread-join()的区别解析

    首先, thread-join() 方法是Java语言中提供的一种线程同步机制,当一个线程调用另一个线程的join()方法时,当前线程就会被阻塞,直到被调用join()方法的线程执行完毕。join()方法的原理是不断的检查线程是否存活,...

    C#多线程之Thread中Thread.IsAlive属性用法分析

    - **等待(Wait)**:线程因调用了`Sleep()`, `Join()`, `Monitor.Wait()`, 或其他阻塞方法而暂停执行。 - **挂起(Suspended)**:线程被挂起,无法执行,但内存占用仍然存在。 - **终止(Stopped/Terminated)*...

    java 携子之手 与子偕老(join)

    值得注意的是,join()方法可以指定等待的时间,即`thread.join(long millis)`,如果被join的线程在这段时间内没有结束,那么调用join()的线程将不再等待并继续执行。此外,join()还可以接受一个纳秒级别的参数,如`...

    sleep()、wait()、yield()和join()方法特点及区别.docx

    1. **来源不同**:`sleep()`是`Thread`类的方法,它允许当前线程暂停执行指定的时间,然后恢复执行。而`wait()`是`Object`类的方法,主要用于线程间通信,让当前线程等待其他线程的通知。 2. **锁的释放**:`sleep...

    Java多线程join方法实例代码

    在Java中,join方法是Thread类中的一个非静态方法,用于让一个线程等待另一个线程的执行完毕。例如,Thread t = new MyThread(); t.start(); t.join();在这里,主线程会等待MyThread线程的执行完毕,然后继续执行。 ...

Global site tag (gtag.js) - Google Analytics