2 потока всегда получают одинаковые результаты, используя случайные методы - PullRequest
0 голосов
/ 01 февраля 2019
Thread t1 = new Thread(new Runnable() {
        public void run(){
            int i = 0;
            while(secondsPassed <= 5) {
                while(list.length()<4 && secondsPassed <= 5);
                Random r = new Random();
                if(r.nextInt(100) < 10) {
                    list.removeFirst();
                    i++;                
                    try {
                        Thread.sleep(20);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }                       
                }
            }
            System.out.println("Thread t1 is finished with  "+ i);
        }
    });

    Thread t2 = new Thread(new Runnable() {
        public void run(){
            int i = 0;
            while(secondsPassed <= 5) {
                Random a = new Random();
                System.out.println("Thread t2 is turn  "+ i + "with" + a.nextInt(100));
                char c = (char)(a.nextInt(23) + 'D');
                if(a.nextInt(100) < 10) {
                    list.insert(c);
                    i++;
                }
                try {
                    Thread.sleep(20);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.println("Thread t2 is finished with  " + i);
        }
    });

Для моего потока 1 и потока 2 они ожидают удаления и добавления узла в связанный список, и они ограничены методом Random () с вероятностью 10%, и после каждого хода они будутспать на 20 мс.Однако каждый раз, когда я запускаю свою программу, потоки 1 и 2 всегда будут генерировать одинаковые возможности.

...