JavaRush /จาวาบล็อก /Random-TH /ระเหย (ตัวอย่างในการบรรยายที่ 17)
dimaMJ
ระดับ
Craiova

ระเหย (ตัวอย่างในการบรรยายที่ 17)

เผยแพร่ในกลุ่ม
โดยทั่วไปมีตัวอย่าง c ในการบรรยายที่ 17 บอกว่าถ้า ไม่ได้ใช้volatileตัวแปรแล้วเปลี่ยนค่าของตัวแปรนี้จากเธรดอื่น คนอื่นจะไม่ทราบเกี่ยวกับมัน ฉันเขียนตัวอย่างใหม่เท่านั้น ในวิธีการจะแสดงชื่อของเธรดและค่าและปรากฎว่าไม่ว่าจะมีตัวแปรอยู่หรือไม่ก็ตามค่ายังคงเปลี่ยนแปลงสำหรับโฟลว์ทั้งหมดแม้ว่าคุณจะเคาะฉันก็สับสนโดยสิ้นเชิง ถ้าฉัน เมื่อรู้การซิงโครไนซ์แล้วฉันก็สับสนและไม่สามารถนำไปใช้ในทางใดทางหนึ่งได้ บางทีฉันอาจสร้างตัวอย่างผิดไปหรือเปล่า? ฉันพยายามสร้างคลาสและสืบทอดจากและสร้างสองอินสแตนซ์แล้วรันทั้งคู่ แต่มันก็ไม่ได้ผล ช่วยฉันด้วย ไม่อย่างนั้นฉันจะบ้าไปแล้ว) isCancelvolatilerunisCancelvolatilevolatileClockThreadmainvolatileระเหยได้ (ตัวอย่างในการบรรยายที่ 17) - 1
public static void main(String[] args)
    {
       Clock n = new Clock();

        Thread thread1 = new Thread(n);
        Thread thread2 = new Thread(n);
        thread1.start();
        thread2.start();

        try
        {
            Thread.sleep(3000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        n.cancel();

    }

    public static class Clock implements Runnable
    {
        private volatile boolean isCancel = false;

        public void cancel()
        {
            this.isCancel = true;
        }

        @Override
        public void run()
        {
            while (true)
            {

                try
                {   System.out.println(Thread.currentThread().getName()+" "+isCancel);
                    Thread.sleep(2000);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION