JavaRush /مدونة جافا /Random-AR /متقلب (مثال في المحاضرة 17)
dimaMJ
مستوى
Craiova

متقلب (مثال في المحاضرة 17)

نشرت في المجموعة
بشكل عام يوجد مثال c في المحاضرة 17 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