Avatar ·

ما الفرق بين wait() و sleep() في Java؟ متى نستخدم كل منهما؟

مرحبًا بالجميع! لقد بدأت للتو في فهم تعدد الخيوط في Java وأصبحت مرتبكًا بين طريقتين: wait() و sleep(). كلاهما يبدو أنهما "يعلقان" الخيط، لكنهما يتصرفان بشكل مختلف، ولا أفهم متى يجب استخدام كل منهما.

إليك مثال كتبته. أريد أن يقوم خيط بطباعة الأرقام والآخر بطباعة الحروف، بالتناوب. لكن النتيجة فوضوية:

public class Test {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println(i);
                try { Thread.sleep(1000); } catch (InterruptedException e) {}
            }
        });

        Thread t2 = new Thread(() -> {
            for (char c = 'A'; c < 'F'; c++) {
                System.out.println(c);
                try { Thread.sleep(1000); } catch (InterruptedException e) {}
            }
        });

        t1.start();
        t2.start();
    }
}