原创

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方法用于消费资源。通过waitnotify,实现了生产者和消费者之间的协同工作。

总结

线程通信是多线程编程中重要的一部分,它确保了不同线程之间的协同工作和资源的正确共享。共享变量和wait/notify机制是实现线程通信的两种常见方式,开发者可以根据具体需求选择合适的方式。

正文到此结束
本文目录