Я написал следующий код, используя synchronizedList():Почему не работает должным образом synchronizedList
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package collectionsdemo;
import java.util.*;
class ThreadTest implements Runnable
{
Thread t;
private int var;
public ThreadTest(int var)
{
t = new Thread(this);
this.var = var;
t.start();
}
@Override
public void run()
{
System.out.println(var);
}
}
public class CollectionsDemo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws InterruptedException {
List<ThreadTest> synlist = Collections.synchronizedList(new ArrayList<>());
synlist.add(new ThreadTest(1));
synlist.add(new ThreadTest(2));
synlist.add(new ThreadTest(3));
synlist.add(new ThreadTest(4));
synlist.add(new ThreadTest(5));
for (int i = 0; i < 5; i++) {
synlist.get(i).t.join();
}
//System.out.println("Sunchronized list is :"+list);
}
}
Теперь еще я получаю выход не в правильном порядке. Они приходят в другом порядке каждый раз. Что делать сейчас? Как правильно использовать метод synchronizedList()?
Какой заказ вы ожидаете? Зачем? –
Перейдите и снова просмотрите спецификацию 'Collections.synchronizedList'. Вы обнаружите, что это не имеет никакого отношения к порядку запуска потоков (но только для обеспечения потокобезопасных операций). –
Вся суть потоков - это параллельное выполнение *. Почему вы ожидаете, что они будут работать в любом конкретном порядке? – shmosel