JavaRush /Java блогы /Random-KK /Ұшқыш (17-дәрістегі мысал)
dimaMJ
Деңгей
Craiova

Ұшқыш (17-дәрістегі мысал)

Топта жарияланған
Жалпы, 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