为一个Java领域的专家,请完成以下任务:java中怎么实现线程同步,比如一个线程需要使用到另一个线程的执行结果
时间: 2023-12-03 10:43:25 浏览: 31
在Java中,有多种方法可以实现线程同步,其中最常用的方式是使用synchronized关键字和wait()/notify()方法。下面是一个例子,演示了如何使用这些方法来实现线程同步。
假设我们有两个线程,一个线程计算某个任务的结果,另一个线程需要等待该任务完成后才能使用该结果。那么我们可以使用以下代码:
```java
public class ThreadSyncDemo {
private int result; // 存储计算结果
private boolean isResultReady; // 标识结果是否已经计算完成
public synchronized void setResult(int result) {
this.result = result;
this.isResultReady = true;
notify(); // 唤醒等待线程
}
public synchronized int getResult() throws InterruptedException {
while (!isResultReady) {
wait(); // 等待结果计算完成
}
return result;
}
}
public class TaskThread extends Thread {
private ThreadSyncDemo syncDemo;
public TaskThread(ThreadSyncDemo syncDemo) {
this.syncDemo = syncDemo;
}
@Override
public void run() {
// 计算结果
int result = 100;
// 存储结果
syncDemo.setResult(result);
}
}
public class MainThread {
public static void main(String[] args) throws InterruptedException {
ThreadSyncDemo syncDemo = new ThreadSyncDemo();
TaskThread taskThread = new TaskThread(syncDemo);
taskThread.start();
// 等待结果计算完成
int result = syncDemo.getResult();
System.out.println("Result: " + result);
}
}
```
在上面的代码中,TaskThread线程计算了结果,并通过setResult()方法将结果存储到ThreadSyncDemo对象中。getResult()方法会一直等待,直到isResultReady标识为true,表示结果已经计算完成,然后返回结果。
需要注意的是,上述代码中synchronized关键字用来保证setResult()和getResult()方法的互斥性,wait()/notify()方法用来实现线程的等待和唤醒。此外,getResult()方法需要在循环中等待,以防止虚假唤醒的情况发生。