java面试题-Java如何实现多线程间的通信?
在Java多线程编程中,线程间通信是一项关键的技术,用于协调不同线程之间的执行顺序和共享资源。本教程将介绍两种线程通信的方式:共享变量和wait/notify机制,并提供详细的示例代码和解释。
1. 共享变量方式
共享变量是指多个线程可以访问和修改的变量。线程通过读取和修改共享变量来实现通信。下面是一个简单的示例代码:
import lombok.Data;
@Data
public class SharedVariableDemo {
private int variable = 1;
public static void main(String[] args) {
final SharedVariableDemo sharedVariableDemo = new SharedVariableDemo();
Thread thread1 = new Thread(() -> {
sharedVariableDemo.setVariable(100);
});
Thread thread2 = new Thread(() -> {
System.out.println(sharedVariableDemo.getVariable());
});
thread1.start();
thread2.start();
}
}
在这个例子中,线程1通过修改variable
的值为100,而线程2则通过读取variable
的值。通过共享变量,线程之间实现了简单的通信。
2. wait/notify机制
wait/notify
机制是Java提供的一种更灵活的线程通信方式。它基于对象的锁机制,可以在等待条件满足时通知其他线程。以下是一个生产者-消费者的示例代码:
public class WaitNotifyDemo {
private boolean produced = false;
private int resource;
public synchronized void produce(int value) {
while (produced) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
resource = value;
produced = true;
System.out.println("Produced: " + resource);
notify();
}
public synchronized void consume() {
while (!produced) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Consumed: " + resource);
produced = false;
notify();
}
public static void main(String[] args) {
final WaitNotifyDemo demo = new WaitNotifyDemo();
Thread producerThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
demo.produce(i);
}
});
Thread consumerThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
demo.consume();
}
});
producerThread.start();
consumerThread.start();
}
}
在这个例子中,produce
方法用于生产资源,consume
方法用于消费资源。通过wait
和notify
,实现了生产者和消费者之间的协同工作。
总结
线程通信是多线程编程中重要的一部分,它确保了不同线程之间的协同工作和资源的正确共享。共享变量和wait/notify
机制是实现线程通信的两种常见方式,开发者可以根据具体需求选择合适的方式。
正文到此结束
- 本文标签: Java 面试题
- 本文链接: https://www.jietongc.com/article/68
- 版权声明: 本文由大熊科技原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权