java中分析sleep()、yield()、join()的区别
时间: 2023-08-01 21:11:13 浏览: 80
在Java中,sleep()、yield()、join()都是线程的方法,它们有以下的区别:
1. sleep(): 使当前线程暂停指定的时间,让出CPU的时间片,进入阻塞状态,不会释放锁,等待时间结束后自动恢复运行状态,继续执行。
2. yield(): 使当前线程暂停一次,让出CPU的时间片,进入就绪状态,如果没有其他线程抢占CPU的时间,当前线程会立刻重新执行。但是,如果有其他线程抢占CPU的时间,那么当前线程就需要等待其他线程执行完毕后才能再次执行。
3. join(): 当一个线程执行到另一个线程的join()方法时,该线程会挂起,等待另一个线程执行完毕后再继续执行。如果另一个线程已经执行完毕了,那么当前线程会立刻恢复运行,否则当前线程会一直等待。
总的来说,sleep()、yield()、join()都是用来控制线程执行的方法,但它们的作用和用法不同,需要根据具体的需求来选择。
相关问题
java中用代码分析sleep()、yield()、join()的区别
下面是使用Java代码分析sleep()、yield()、join()的区别:
1. sleep()的使用:
```java
public class SleepDemo {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000); // 线程暂停1秒
System.out.println("线程 " + Thread.currentThread().getName() + " 执行中...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
上面的代码中,通过Thread.sleep()方法使当前线程暂停1秒,然后继续执行。在每次暂停的过程中,当前线程会进入阻塞状态,并且不会释放锁。
2. yield()的使用:
```java
public class YieldDemo {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
Thread.yield(); // 线程暂停一次,让出CPU时间片
System.out.println("线程 " + Thread.currentThread().getName() + " 执行中...");
}
}
}
```
上面的代码中,通过Thread.yield()方法使当前线程暂停一次,然后让出CPU的时间片,进入就绪状态。在每次暂停的过程中,当前线程不会释放锁,如果没有其他线程抢占CPU的时间,当前线程会立刻重新执行。
3. join()的使用:
```java
public class JoinDemo {
public static void main(String[] args) throws InterruptedException {
Thread threadA = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("线程A执行中...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread threadB = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("线程B执行中...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
threadA.start();
threadA.join(); // 等待线程A执行完毕后再执行下面的代码
threadB.start();
}
}
```
上面的代码中,通过Thread.join()方法使主线程挂起,等待线程A执行完毕后再执行下面的代码。在每次暂停的过程中,当前线程会进入阻塞状态,并且不会释放锁。如果线程A已经执行完毕了,那么主线程会立刻恢复运行,否则主线程会一直等待。
下面哪些方法是java.lang.thread类中的方法?哪些方法是能抛出异常interruptedexception的?哪些方法在java中是禁用的? run(), start(), stop(), suspend(), resume(), sleep(), interrupt(), yield(), join()
Java.lang.Thread类中的一些方法如run()、start()、interrupt()、join()等可以用来创建和控制线程,其中interrupt()方法能够抛出InterruptedException异常。
而stop()、suspend()、resume()等方法在Java中被禁用,不建议使用。
阅读全文