java 创建两个线程,实现线程同步,一个线程连接数据库进行数据处理,另一个线程进行数据处理状态的返回
时间: 2024-12-19 20:08:09 浏览: 7
在Java中,创建并同步两个线程可以使用`synchronized`, `wait()`, `notify()` 或者更高级的并发工具如`Semaphore`, `CountDownLatch`, 和 `CyclicBarrier`。以下是使用`synchronized`关键字的一个简单示例:
```java
class DataProcessor {
private int data;
private final Object lock = new Object();
public synchronized void processData(int newData) {
data = newData;
// 假设这里是一个耗时的操作,比如数据库连接
processDatabase(newData);
// 同步锁释放,允许其他线程获取
notifyAll();
}
private void processDatabase(int data) {
try {
Thread.sleep(1000); // 模拟数据库操作
System.out.println("Processed data from database: " + data);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
DataProcessor dp = new DataProcessor();
Thread writerThread = new Thread(dp::processData, "Writer");
Thread readerThread = new Thread(dp::checkStatus, "Reader");
writerThread.start(); // 数据处理线程开始
writerThread.join(); // 等待数据处理完成
readerThread.start(); // 返回状态线程开始
}
public static void checkStatus(DataProcessor dp) {
while (true) {
if (dp.data != null) { // 如果数据存在
System.out.println("Current status: Data processed, value: " + dp.data);
break; // 数据处理完成,跳出循环
}
synchronized (dp.lock) {
dp.lock.wait(); // 线程等待直到数据准备好
}
}
}
}
```
在这个例子中,`writerThread`负责处理数据并将结果存储在共享变量`data`中。`readerThread`通过检查`data`是否已存在并持有锁来同步获取数据处理的状态。当`writerThread`完成了数据库操作后,会调用`notifyAll()`唤醒所有等待在锁上的线程。
阅读全文