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线程基础 在Java中,**线程**是一种轻量级的进程,它允许一个程序同时执行多个任务,从而提高程序的执行效率。Java从1.0版本开始就支持多线程编程,并在后续版本中不断完善。...
在Java平台上,多线程和并行计算是两个关键的概念,它们对于开发高效、响应迅速的应用程序至关重要。本文将深入探讨这两个主题,旨在提供全面的知识点解析。 **一、Java多线程** 1. **线程定义**:线程是程序执行...
这种设计模式使得程序能并行处理更多任务,但同时也带来了线程管理和同步的挑战。 在C++中,我们可以使用`std::thread`库来创建线程。例如,主线程创建一个新线程,这个新线程又可以创建更多的子线程。下面是一个...
这意味着当一个线程阻塞(如等待I/O操作)时,程序需要决定哪个线程应该获得CPU资源。在单个CPU上,这通常意味着在可运行的线程之间切换。在多核系统中,每个核心可以并发地运行不同线程,进一步提高了并行性。 在...
- `join()`方法:让当前线程等待指定线程结束后再继续执行。 3. **线程状态** - 新建(New):线程被创建但尚未启动。 - 运行(Runnable):线程已启动,等待CPU时间片。 - 阻塞(Blocked):线程被阻塞,如...
在Java中,线程的使用可以提高系统的执行效率,减少处理器的空转时间和上下文切换的时间,但并不一定能提高程序代码的可读性。以下是根据题目内容整理的一些Java线程相关知识点: 1. **线程睡眠**:`Thread.sleep()...
此外,sleep方法可以使线程进入阻塞状态一段时间,而join方法则允许一个线程等待另一个线程完成其任务。 了解线程池的概念也是Java多线程编程中的一个重要知识点。线程池是一种多线程处理形式,它将线程和任务的...
- `yield()`: 让当前线程放弃CPU使用权,但不进入阻塞状态,而是回到就绪队列,让其他线程有机会执行。 - `interrupt()`: 中断线程,标记线程的中断状态。在某些阻塞操作(如`sleep()`, `wait()`, `join()`)中,...
- `Thread.Join` 方法允许主线程等待子线程完成后再继续执行,实现线程间的依赖。 5. **线程优先级** - .NET中的线程有不同优先级,通过`Thread.Priority` 属性设置。但不建议过度依赖优先级,因为操作系统调度...
在调用Join之前,调用线程将被阻塞,直到目标线程完成其工作。 9. **Thread.Sleep**:这个方法让当前线程暂停指定的时间,用于控制线程调度或延迟执行。 10. **线程优先级**:C#允许设置线程的优先级,但应谨慎...
在VC++(Visual C++)编程环境中,线程的管理和监控是多任务并行处理的重要组成部分。本示例“vc中获取一个线程的状态及返回值”主要关注如何在VS2012环境下创建和控制线程,以及如何获取线程的状态和返回值。以下将...
这个函数会阻塞当前线程,直到被等待的线程退出。 ##### 简单线程的示例 - 示例代码通常包括一个简单的线程函数,该函数在新线程中执行,并使用`pthread_create`创建线程,使用`pthread_join`等待线程完成。 ####...
VB.NET提供了丰富的API来控制线程的状态,例如`Abort`方法用于强制终止线程(应谨慎使用),`Join`方法让当前线程等待指定线程完成,以及`IsAlive`属性检查线程是否仍在运行。 在多线程环境中,数据竞争和死锁是...
在Example_1中,可能包含了实现多线程的具体代码示例,如Java的`join()`方法用于让当前线程等待另一个线程结束,`sleep()`方法用于暂停线程执行,`yield()`方法让当前线程暂停,让其他线程有机会执行。 总结,学习...
2. **Join**:线程A调用线程B的Join方法,会等待B线程结束后再继续执行。 3. **Thread.Abort**:强制终止线程,但不推荐使用,因为它可能导致未捕获的异常和数据不一致。 5. **IsBackground**:设置为背景线程的...
- **阻塞状态**:线程因为某种原因暂时不能运行,例如等待I/O操作完成或等待其他线程的信号。 - **终止状态**:线程执行完毕或者被强制终止。 #### 四、线程管理 - **启动线程**:通过调用`Thread`类的`Start`方法...
- 等待线程:可以使用Thread.Join方法来阻塞当前线程,直到目标线程执行完毕。 - 终止线程:通过调用线程的Abort方法可以尝试终止线程,但这种做法并不安全,因为目标线程可能正在进行一些无法安全中断的操作。 -...
`Thread.CurrentThread`属性可以获取当前线程,`Thread.Join()`方法可以让调用线程等待目标线程结束,`Thread.Abort()`则可以强制终止线程。 以上实例应涵盖了创建线程、线程同步、线程池使用、异步编程以及线程...