`

join 只能阻塞当前线程,不能阻塞其它并行线程

 
阅读更多
join 会阻塞当前线程,会强制完其自己的线程后,再释放当前线程的阻塞。
但是它并不阻塞其他线程。

public class ThreadTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Thread t1=new SleepThread("t1");
		Thread t2=new SleepThread("t2");
		t1.start();
		t2.start();
		try {
			t1.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("mainend...");
	}
}

public class SleepThread extends Thread{
	private String t;
	public SleepThread(String t){
		this.t=t;
	}
	@Override
	public void run() {
		try {
				System.out.println(t+"sleep start");
				for(int i=0;i<5;i++){
					Thread.sleep(1000);
					System.out.println(t+"run");
				}
				System.out.println(t+"sleep end");
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


输出结果是:
t1sleep start
t2sleep start
t2run
t1run
t2run
t1run
t1run
t2run
t1run
t2run
t1run
t1sleep end
mainend...
t2run
t2sleep end
分享到:
评论

相关推荐

    java线程与并行(主要讲解java的nio包某些内容)

    ### Java线程与并行详解 #### 一、Java线程基础 在Java中,**线程**是一种轻量级的进程,它允许一个程序同时执行多个任务,从而提高程序的执行效率。Java从1.0版本开始就支持多线程编程,并在后续版本中不断完善。...

    基于JAVA平台的多线程与并行的资料

    在Java平台上,多线程和并行计算是两个关键的概念,它们对于开发高效、响应迅速的应用程序至关重要。本文将深入探讨这两个主题,旨在提供全面的知识点解析。 **一、Java多线程** 1. **线程定义**:线程是程序执行...

    线程中创建子线程

    这种设计模式使得程序能并行处理更多任务,但同时也带来了线程管理和同步的挑战。 在C++中,我们可以使用`std::thread`库来创建线程。例如,主线程创建一个新线程,这个新线程又可以创建更多的子线程。下面是一个...

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    这意味着当一个线程阻塞(如等待I/O操作)时,程序需要决定哪个线程应该获得CPU资源。在单个CPU上,这通常意味着在可运行的线程之间切换。在多核系统中,每个核心可以并发地运行不同线程,进一步提高了并行性。 在...

    线程及线程应用总结

    - `join()`方法:让当前线程等待指定线程结束后再继续执行。 3. **线程状态** - 新建(New):线程被创建但尚未启动。 - 运行(Runnable):线程已启动,等待CPU时间片。 - 阻塞(Blocked):线程被阻塞,如...

    Java工程师线程试题

    在Java中,线程的使用可以提高系统的执行效率,减少处理器的空转时间和上下文切换的时间,但并不一定能提高程序代码的可读性。以下是根据题目内容整理的一些Java线程相关知识点: 1. **线程睡眠**:`Thread.sleep()...

    Java多线程知识点总结

    此外,sleep方法可以使线程进入阻塞状态一段时间,而join方法则允许一个线程等待另一个线程完成其任务。 了解线程池的概念也是Java多线程编程中的一个重要知识点。线程池是一种多线程处理形式,它将线程和任务的...

    java线程api学习文档

    - `yield()`: 让当前线程放弃CPU使用权,但不进入阻塞状态,而是回到就绪队列,让其他线程有机会执行。 - `interrupt()`: 中断线程,标记线程的中断状态。在某些阻塞操作(如`sleep()`, `wait()`, `join()`)中,...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例).rar

    - `Thread.Join` 方法允许主线程等待子线程完成后再继续执行,实现线程间的依赖。 5. **线程优先级** - .NET中的线程有不同优先级,通过`Thread.Priority` 属性设置。但不建议过度依赖优先级,因为操作系统调度...

    C#多线程介绍.rar

    在调用Join之前,调用线程将被阻塞,直到目标线程完成其工作。 9. **Thread.Sleep**:这个方法让当前线程暂停指定的时间,用于控制线程调度或延迟执行。 10. **线程优先级**:C#允许设置线程的优先级,但应谨慎...

    vc中获取一个线程的状态及返回值

    在VC++(Visual C++)编程环境中,线程的管理和监控是多任务并行处理的重要组成部分。本示例“vc中获取一个线程的状态及返回值”主要关注如何在VS2012环境下创建和控制线程,以及如何获取线程的状态和返回值。以下将...

    linux多线程手册

    这个函数会阻塞当前线程,直到被等待的线程退出。 ##### 简单线程的示例 - 示例代码通常包括一个简单的线程函数,该函数在新线程中执行,并使用`pthread_create`创建线程,使用`pthread_join`等待线程完成。 ####...

    VB.NET 多线程操作

    VB.NET提供了丰富的API来控制线程的状态,例如`Abort`方法用于强制终止线程(应谨慎使用),`Join`方法让当前线程等待指定线程完成,以及`IsAlive`属性检查线程是否仍在运行。 在多线程环境中,数据竞争和死锁是...

    线程的例子

    在Example_1中,可能包含了实现多线程的具体代码示例,如Java的`join()`方法用于让当前线程等待另一个线程结束,`sleep()`方法用于暂停线程执行,`yield()`方法让当前线程暂停,让其他线程有机会执行。 总结,学习...

    C#多线程实例

    2. **Join**:线程A调用线程B的Join方法,会等待B线程结束后再继续执行。 3. **Thread.Abort**:强制终止线程,但不推荐使用,因为它可能导致未捕获的异常和数据不一致。 5. **IsBackground**:设置为背景线程的...

    C# 多线程汇总

    - **阻塞状态**:线程因为某种原因暂时不能运行,例如等待I/O操作完成或等待其他线程的信号。 - **终止状态**:线程执行完毕或者被强制终止。 #### 四、线程管理 - **启动线程**:通过调用`Thread`类的`Start`方法...

    c#多线程编程第二版[2016]

    - 等待线程:可以使用Thread.Join方法来阻塞当前线程,直到目标线程执行完毕。 - 终止线程:通过调用线程的Abort方法可以尝试终止线程,但这种做法并不安全,因为目标线程可能正在进行一些无法安全中断的操作。 -...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)(0520_).rar

    `Thread.CurrentThread`属性可以获取当前线程,`Thread.Join()`方法可以让调用线程等待目标线程结束,`Thread.Abort()`则可以强制终止线程。 以上实例应涵盖了创建线程、线程同步、线程池使用、异步编程以及线程...

Global site tag (gtag.js) - Google Analytics