原文地址:
Java 中 join 和 yield 的作用
1、 A.join,在API中的解释是,堵塞当前线程B,直到A执行完毕并死掉,再执行B。
用一个小例子来说明吧
static class ThreadA extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
for (int i = 0; i < 10; i++) {
System.out.println("ThreadA" + i);
}
}
}
static class ThreadB extends Thread {
ThreadA a;
public ThreadB(ThreadA a) {
// TODO Auto-generated constructor stub
this.a = a;
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
System.out.println("ThreadB start");
try {
a.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("ThreadB end");
}
}
public static void main(String[] args) {
ThreadA a = new ThreadA();
ThreadB b = new ThreadB(a);
b.start();
a.start();
}
执行结果:
ThreadB start
ThreadA0
ThreadA1
ThreadA2
ThreadA3
ThreadA4
ThreadA5
ThreadA6
ThreadA7
ThreadA8
ThreadA9
ThreadB end
首先b线程执行,a线程join后,直接执行完a,然后才执行b,证实上述说法。
2、 A.yield,A让出位置,给B执行,B执行结束A再执行。跟join意思正好相反!
static class ThreadA extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
for (int i = 0; i < 10; i++) {
System.out.println("ThreadA " + i);
}
}
}
static class ThreadB extends Thread {
ThreadA a;
public ThreadB(ThreadA a) {
// TODO Auto-generated constructor stub
this.a = a;
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
System.out.println("ThreadB start");
try {
for (int i = 0; i < 10; i++) {
if(i==2){
a.yield();
}
System.out.println("ThreadB " + i);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("ThreadB end");
}
}
public static void main(String[] args) {
ThreadA a = new ThreadA();
ThreadB b = new ThreadB(a);
b.start();
a.start();
}
执行结果:
ThreadB start
ThreadA 0
ThreadB 0
ThreadA 1
ThreadB 1
ThreadA 2
ThreadB 2
ThreadB 3
ThreadB 4
ThreadB 5
ThreadB 6
ThreadB 7
ThreadB 8
ThreadB 9
ThreadB end
ThreadA 3
ThreadA 4
ThreadA 5
ThreadA 6
ThreadA 7
ThreadA 8
ThreadA 9
首先B执行,然后A执行;在B的循环中,i=2时,A执行yield;接着B执行完,才轮到A执行。
分享到:
相关推荐
以上就是对Java线程中wait、await、sleep、yield、join用法的总结。这些方法在实际开发中,对于控制多线程运行的时序和协调非常关键。理解这些方法的正确使用方式是掌握Java并发编程的基础。同时,使用时需特别注意...
在Java多线程编程中,理解并正确使用`yield`和`join`方法是至关重要的。这两个方法都属于线程控制策略的一部分,但它们的作用和使用场景有所不同。 首先,我们来详细探讨`Thread.yield()`方法。这个方法的目的是让...
之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会讨论join()和yield()方法的区别。坦白的说,实际上我并没有用过其中任何一个方法,所以,如果你感觉有不恰当的地方,请提出讨论。 Java线程调度...
T03_Sleep_Yield_Join.java
本文将深入探讨Java中的四个关键方法:`sleep()`, `wait()`, `yield()`和`join()`,以及它们各自的特点和区别。 首先,我们来看`sleep()`和`wait()`的区别: 1. **来源不同**:`sleep()`是`Thread`类的方法,它...
本文将详细解析线程中`sleep()`, `join()`, `yield()`, 和 `wait()` 四个方法的区别。 1. `sleep()` `sleep()` 方法是 `java.lang.Thread` 类的一个静态方法,它允许当前正在执行的线程在指定的毫秒数内暂停执行。...
今天我们将深入探讨由IT十八掌徐培成讲解的Java基础课程中的第八天主题——多线程,特别是关于`yield()`方法的知识点。 首先,我们要明白什么是线程。线程是程序执行的最小单位,每个线程都代表程序的一个独立控制...
在Java中,可以使用Thread类的yield()方法实现线程的礼让。 线程的合并是指一个线程等待另一个线程执行完毕后再继续执行。在Java中,可以使用Thread类的join()方法实现线程的合并。 线程的中断是指在一个线程中断另...
本资源主要讲解了Java中四个常用的线程控制方法:sleep()、yield()、join()和wait(),它们是Java多线程编程中的重要组成部分。下面是对每个方法的详细讲解: 1. sleep()方法: sleep()方法是Thread类...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
2. sleep()、wait()、join()、yield() 之间的区别:sleep() 方法使线程休眠,wait() 方法使线程等待,join() 方法使线程等待其他线程完成,yield() 方法使线程让步。 3. Thread 和 Runnable 的区别:Thread 是线程类...
在Java中,多线程允许程序中有多个执行流同时进行,从而提高程序的效率和响应速度。 首先,我们需要理解线程的基本概念。线程是进程中的一个执行单元,每个进程可以包含一个或多个线程。在Java中,多线程的实现可以...
sleep、wait 和 join 是 Java 中的线程控制方法。sleep 方法可以让线程暂停执行,wait 方法可以让线程等待对象锁,join 方法可以让线程等待目标线程执行完成。 yield yield 方法可以让线程礼让,释放 CPU 资源给...
Java提供了一些方法来控制线程状态,如`sleep()`使线程暂停执行一段时间,`join()`等待指定线程结束,`yield()`让当前线程暂停,让其他相同优先级的线程有机会执行,`interrupt()`用于中断线程。 同步是Java线程...
Java提供了多种线程控制方法,如start()用于启动线程,run()是线程的主要执行体,join()使当前线程等待该线程终止,sleep()使线程暂停执行一段时间,yield()让当前线程暂停,让其他线程有机会运行,synchronized...
Java并发编程是软件开发中的重要领域,特别是在大型系统和高并发场景中不可或缺。"13-Java并发编程学习宝典.zip" 包含了一系列关于Java并发编程的学习资源,旨在帮助开发者掌握多线程编程的核心技术和最佳实践。以下...
- 线程控制:start()、sleep()、join()、yield()、interrupt()等方法。 - 同步机制:synchronized关键字和Lock接口。 这份80页的学习笔记详细讲解了这些核心概念,并使用了彩色标记突出重点内容,对于新手复习和...
Java虚拟机提供了`Thread.sleep()`,`Thread.yield()`和`Thread.join()`等方法来影响线程调度。`sleep()`使当前线程进入阻塞状态,定时后自动恢复到就绪状态;`yield()`让当前线程短暂放弃CPU,但不保证一定让其他...
Java中控制线程的方法有多种,如start()启动线程,run()执行线程,sleep()让线程休眠,join()等待其他线程完成,yield()让当前线程暂停,让其他线程有机会执行,以及interrupt()和isInterrupted()用于中断和检查线程...
`sleep()`方法让线程进入堵塞状态,`join()`方法等待线程执行完成,`yield()`方法让当前线程让出CPU,`stop()`方法停止线程(不推荐使用,因为可能引起数据不一致),`interrupt()`方法中断线程,以及`wait()`和`...