JavaRush /Java Blog /Random-TL /Volatile (halimbawa sa lecture 17)
dimaMJ
Antas
Craiova

Volatile (halimbawa sa lecture 17)

Nai-publish sa grupo
Sa pangkalahatan, mayroong isang halimbawa c sa lecture 17 volatile, sinasabi nito na kung ang isang variable isCancelay hindi ginagamit volatile, pagkatapos ay sa pamamagitan ng pagbabago ng mga halaga ng variable na ito mula sa isa pang thread, hindi malalaman ng iba ang tungkol dito, muling isinulat ko ang halimbawa, lamang sa pamamaraan runang pangalan ng thread at ang halaga ay ipinapakita isCancelat ito ay lumabas na depende sa kung ang variable ay naroroon volatileo wala, ang halaga ay nagbabago pa rin para sa lahat ng mga daloy, kahit na kumatok ka, ako ay ganap na nalilito; kung ako Naisip ko ang pag-synchronize, pagkatapos ay nalilito ako volatileat hindi ko mailapat ito sa anumang paraan. Siguro mali ang ginawa kong halimbawa kahit papaano? Sinubukan ko ring lumikha ng isang klase Clockat magmana mula sa Thread, at mainlumikha ng dalawang pagkakataon at patakbuhin ang pareho, volatilehindi rin ito gumana, tulungan mo ako, kung hindi, mababaliw ako) Volatile (halimbawa sa lecture 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();
                }
            }
        }
    }
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION