JavaRush /Blog Java /Random-VI /Dễ bay hơi (ví dụ ở bài 17)
dimaMJ
Mức độ
Craiova

Dễ bay hơi (ví dụ ở bài 17)

Xuất bản trong nhóm
Nói chung là bài 17 có ví dụ c volatile, nó nói nếu isCancelkhông dùng biến volatilethì đổi giá trị của biến này từ thread khác thì người khác sẽ không biết về nó, mình viết lại ví dụ thôi trong phương thức, runtên của luồng và giá trị được hiển thị isCancelvà hóa ra là bất kể biến có hiện diện volatilehay không, giá trị vẫn thay đổi cho tất cả các luồng, ngay cả khi bạn gõ, tôi hoàn toàn bối rối; nếu tôi đã tìm ra cách đồng bộ hóa, sau đó tôi volatilebối rối và không thể áp dụng nó theo bất kỳ cách nào. Có lẽ tôi đã tạo sai ví dụ nào đó? Mình cũng đã thử tạo một lớp Clockvà kế thừa từ Thread, maintạo hai instance và chạy cả hai, cũng volatilekhông được, giúp mình với, nếu không thì điên mất) Biến động (ví dụ bài 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();
                }
            }
        }
    }
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION