Wielowątkowe dodawanie liczb do listy

0

Witam,
Mam problem z moim wielowątkowym programikiem w javie.
Zamieszczam kod:

 

import java.util.List;
import java.util.Random;

public class Sum implements Runnable {

	private volatile List<Integer> results = null;

	public Sum(List<Integer> results) {
		this.results = results;
		System.out.println("Start " + Thread.currentThread().getName() + " thread...");
	}

	private synchronized void addElement() {
		while (results.size() < 100) {
			Random rand = new Random();
			int num = rand.nextInt(100);
			if (!results.contains(num)) {
				results.add(num);
				System.out.println("Thread " + Thread.currentThread().getId() + " adding " + num);
			} else {
				System.out.println("Thread " + Thread.currentThread().getId() + " trying add " + num + " with fail");
			}
		}
	}

	@Override
	public void run() {
		addElement();
	}

}

import java.util.ArrayList;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		List<Integer> results = new ArrayList<>();
		List<Thread> threads = new ArrayList<>();
		Sum suma = new Sum(results);
		for (int i = 0; i < 5; i++) {
			threads.add(new Thread(suma));
		}

		for (Thread thread : threads)
			thread.start();

		for (Thread thread : threads)
			try {
				thread.join();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		System.out.println(results.size() + " SIZE");

	}

}

Problem w tym, że do dodawania tych liczb dobiera mi się na początku jeden wątek i później już nie są one przełączane na inne.
Wyjście konsoli (fragment):

Thread 10 adding 27
Thread 10 adding 12
Thread 10 trying add 80 with fail
Thread 10 trying add 15 with fail
Thread 10 trying add 76 with fail
Thread 10 adding 1
Thread 10 trying add 91 with fail
Thread 10 adding 11
Thread 10 trying add 99 with fail
Thread 10 trying add 92 with fail
Thread 10 trying add 74 with fail
Thread 10 trying add 87 with fail
Thread 10 trying add 45 with fail
Thread 10 trying add 30 with fail
Thread 10 trying add 22 with fail
Thread 10 trying add 22 with fail
Thread 10 adding 33
Thread 10 adding 41
Thread 10 trying add 90 with fail
Thread 10 trying add 49 with fail
Thread 10 trying add 25 with fail
Thread 10 trying add 82 with fail

Proszę o pomoc

0
List<Integer> results = new ArrayList<>();
        List<Thread> threads = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            Sum suma = new Sum(results);
            threads.add(new Thread(suma));
        }

        for (Thread thread : threads)
            thread.start();

        for (Thread thread : threads)
            try {
                thread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        System.out.println(results.size() + " SIZE");

    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1