Проблемы многопоточности JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблемы многопоточности Java

Сообщение Anonymous »

У меня есть длинная задача по компьютерному моделированию, которую я решил запускать параллельно для повышения эффективности и объединения результатов данных.
Недавно я усложнил эту длинную задачу, и с тех пор предложения Exception внутри этой ExpensiveTask вызываются, когда выполнялось в нескольких потоках:
  • NullPointerException
  • ConcurrentModificationException (вызывается для объектов, к которым обращается только один поток!)
    о доступе к внутренним структурам данных.
Вот это:

Код: Выделить всё

        //int NUMBER_OF_THREADS = 1;//works perfectly
int NUMBER_OF_THREADS = 2;//2 and more cause internal ExpensiveTask Exception for some threads.
ExecutorService executor = Executors.newFixedThreadPool(NUMBER_OF_THREADS);
CountDownLatch latch = new CountDownLatch(NUMBER_OF_THREADS);
// Shared result container
ConcurrentMap globalSimDataMap = new ConcurrentHashMap();

for (int i = 0; i < NUMBER_OF_THREADS; i++) {

executor.submit(() -> {

try {

System.out.println("Task " + Thread.currentThread().getName());
ExpensiveTask expensiveTaskInstance=null;

try{
expensiveTaskInstance = new ExpensiveTask();
} catch(Exception e){
//Here is where the program falls down when multithreading implemented
e.printStackTrace();
Thread.currentThread().interrupt();
}

// Get simulation results from this thread
expensiveTaskInstance.getSimulationRecord();

// Aggregate results into the global map
/*
* @TODO
*/

} finally {
latch.countDown();

}
});
}

try{

latch.await();  // Wait for all threads to complete
executor.shutdown();  // Shut down the executor
} catch(Exception e){
e.printStackTrace();
}
Я подчеркиваю, что ExpensiveTask правильно протестирован, и подобные вещи никогда не происходят при запуске в одном потоке. На мой взгляд, эта реализация многопоточности сделана плохо, но я не могу правильно отладить эту проблему.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»