JavaRush /Java Blog /Random-KO /휘발성(강의 17의 예)
dimaMJ
레벨 25
Craiova

휘발성(강의 17의 예)

Random-KO 그룹에 게시되었습니다
일반적으로 강의 17에 c 예제가 있는데 volatile, 변수가 isCancel사용되지 않으면 volatile다른 스레드에서 이 변수의 값을 변경하면 다른 스레드에서 이를 알 수 없다는 내용입니다. 예제를 다시 작성했습니다. 메서드에 run스레드 이름과 값이 표시되는데 isCancel변수 유무에 관계없이 모든 흐름에 대해 값이 여전히 변경되는 것으로 나타났습니다 volatile. 노크를 해도 완전히 혼란스럽습니다. 동기화를 알아냈는데 volatile혼란스러워서 어떤 방식으로도 적용할 수 없습니다. 어쩌면 내가 예제를 잘못 만든 건 아닐까? 또한 클래스를 만들고 Clock에서 상속 Thread하고 main두 개의 인스턴스를 만들어 둘 다 실행하려고 시도했지만 volatile작동하지 않았습니다. 도와주세요. 그렇지 않으면 미칠 것입니다) 휘발성(강의 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