wait

Взаимодействие между потоками в Java. Wait и notify.

Представим ситуацию, что у нас многопотоковое приложение, написанное на Java. Есть некий класс, выполняющий какое-либо конкретное действие с данными, например, отправку их по почте, а сами данные подготавливаются в другом месте кода в другом потоке. Перед отправкой данных нам необходимо как-то связаться с потоком, подготавливающим данные, дабы поймать момент, когда они будут готовы.

Пример 1. Простой, но неправильный пример

public class DataManager {
    private static boolean ready = false;

    public void sendData() {
        while (!ready) {
            // waiting
            System.out.println("Waiting for data...");
        }

        // continue execution and sending data
        System.out.println("Sending data...");
    }

    public void prepareData() {
        System.out.println("Data prepared");
        ready = true;
    }
}