JavaRush /בלוג Java /Random-HE /נדיף (דוגמה בהרצאה 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