java 多线程让另一个线程先执行 循环执行
时间: 2023-08-04 15:22:52 浏览: 72
可以使用 wait() 和 notify() 方法来实现让另一个线程先执行,并且循环执行。
具体实现方法如下:
首先,在主线程中创建一个共享对象 lock,然后启动两个线程 A 和 B,其中线程 A 负责循环执行任务,线程 B 负责在某个条件下唤醒线程 A。
在线程 A 中,使用 synchronized(lock) 进入临界区,然后使用 while 循环来判断是否需要等待。如果需要等待,则调用 lock.wait() 方法使线程 A 进入等待状态,直到线程 B 调用 lock.notify() 方法唤醒线程 A。
在线程 B 中,也使用 synchronized(lock) 进入临界区,然后在满足某个条件的情况下调用 lock.notify() 方法唤醒线程 A。
代码示例如下:
```java
public class Main {
private static final Object lock = new Object();
private static boolean isNeedWait = true;
public static void main(String[] args) {
Thread threadA = new Thread(() -> {
while (true) {
synchronized (lock) {
while (isNeedWait) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 执行任务
System.out.println("Thread A is running");
isNeedWait = true;
}
}
});
Thread threadB = new Thread(() -> {
while (true) {
synchronized (lock) {
isNeedWait = false;
lock.notify();
}
}
});
threadA.start();
threadB.start();
}
}
```
在上述代码中,线程 A 循环执行任务,并且在 isNeedWait 为 true 的情况下等待线程 B 的唤醒。线程 B 在满足某个条件的情况下调用 lock.notify() 方法唤醒线程 A。这样,线程 A 就可以先执行任务,然后等待线程 B 的唤醒,再次执行任务,实现了让另一个线程先执行,并且循环执行的需求。