/ / Добра практика при изчакване на няколко теми - време, брой или нещо друго? - java, multithreading

Най-добра практика при изчакване на няколко теми - време, брой или нещо друго? - java, multithreading

Приложението ми ще съдържа по няколко теми (в този пример 7) по време на изпълнение, като извършва независима работа. Все пак от време на време нишките ще трябва да синхронизират данните си.

Това ще бъде направено от нишките, които се обаждат на обекта DataSynchronizer, за който всички те имат връзка.

Идеята ми за поток в този клас изглежда така:

public class DataSynchronizer {

public void synchronizeData(List<Data> threadData) {
// Wait for all 7 threads to call this method

// When all 7 are here, hold them here & do work using one of the threads
// or a new anonymous thread

// Release the threads & let them continue their independent work
}
}

Въпросът ми е: Какъв е най-добрият начин да чакам всички x нишки преди да извърша синхронната работа?

Знам, че всички теми ще извикат метода synchronizeData в рамките на 1, максимум 2 секунди един от друг.

Аз също,

1) Изчакайте 2 секунди след първата нишка, обадете се на метода и приемете, че всички теми вече са пристигнали също така? или

2) Съхранявайте броя, за да сте сигурни, че всички активни теми са пристигнали? (Приложението ще изчака вечността, ако нишката се срине точно преди методът на разговор)

3) Брой + изчакване?

4) ???

Отговори:

2 за отговор № 1

Това е, което a CyclicBarrier е за. Тя ви позволява да определите места, където нишки ще изчакат, докато всички пристигнат, а след това по избор изпълнете a Runnable да извърши синхронизация или друго такова нещо.


2 за отговор № 2

Мисля, че имате нужда от java.util.concurrent.CyclicBarrier.


1 за отговор № 3
  1. Да приемем и нишки е много рисков подход.
  2. Колко лошо чака вечността? Звучи неудобно за мен.
  3. Ако удариш изчакването, можеш ли да направиш нещо полезно? Провалете програмата, рестартирайте повредената нишка, помислете за това какво прави тя?

Следващи въпроси:

  • Какво се случва, ако дадена нишка не участва в синхронизацията?
  • Какво се случва, ако синхронизирането е закъсняло?
  • Трябва ли методът ви да казва една нишка от друга или са само 7 взаимозаменяеми работници?