Вопрос : ConcurrentLatch в Java.

Это правильно вставка одновременной защелки?

In внизу сценарий, я хочу isEligibleForClearDown () побежаться одновременно. Пожалуйста suggest.

пока (iterator! = нулевое && iterator.hasNext ()) {startLatch
окончательное CountDownLatch = новое CountDownLatch (резьбы);
для (int iий = 0; iий < 10; i++) {executorService
ExecutorService = Executors.newFixedThreadPool (threads); старт 10 threads.
// если (iterator.hasNext, то ()) {модель
окончательная OrderModel = (OrderModel) iterator.next ();
executorService.execute (new Runnable () {свободное пространство публики
бегут () {календар
теперь = Calendar.getInstance (TimeZone.getTimeZone («Europe/London"));
если (isEligibleForClearDown, то (model, master.getCleardownFields () .getClearDownReqFrom (), теперь)){
если (model.getOrderFields () .hasParentOrderId, то ()){
//add все заказы ребенка к окончательному result
results.add (модель);
} еще {заказы родителя
//add к list
parentOrders.add родителя (модели);
startLatch.countDown

}} ();

}});
} еще {
если (startLatch.getCount () > 0), то {счетчик затухания // до тех пор пока защелка не быть попыткой zero.
{
startLatch.await (); задвижка
} (InterruptedException e) {
LOGGER.error («прервал исключение пока ждущ защелку комплекса предпусковых операций до end."); попытка




}}}} {
startLatch.await (); ожидание // до тех пор пока первые 10 резьб не завершить задвижку processing.
} (InterruptedException e) {
LOGGER.error («прервало исключение пока ждущ защелку комплекса предпусковых операций до end.");
}
}
class=

Ответ : ConcurrentLatch в Java.

Первая вещь, котор я порекомендовал бы двигает ваше обслуживание выполнителя вне петли.  Вам реально только нужно создавать то раз.  В зависимости от вашей вставкы, вы можете мочь сделать им перемеююый типа, то static который поделен всеми примерами этого типа или приватного члена если каждому типу нужен свой собственный бассеин резьбы.  Любая дорога, покуда вы не закроете обслуживание вниз, вы будете повторно использовать те резьбы вместо производить накладные расходы начинать их каждое время.  Если множественным звонокам к этому методу будет нужно побежать одновременно, то двиньте творение обслуживания выполнителя назад в метод, но вне петли.

Она также смотрит как вы создает 10 бассеинов резьбы, с 10 резьбами каждым для того чтобы обрабатывать каждый заказ.  Кодий, котор я прикреплялся переработано для того чтобы обрабатывать все обеспечило заказы с 10 резьбами.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
общественный тип ClearDownService {
    приватные резьбы int;
    приватное executorService ExecutorService;

    общественное ClearDownService (резьбы int) {
        если (резьбы < 1="">= 1. «);
        }
        this.threads = резьбы;
        this.executorService = Executors.newFixedThreadPool (this.threads);
    }

    // iий доработало ваше Кодего итерирования для того чтобы принять вы имеет некоторое собрание предметов OrderModel
    // что вы используете для того чтобы получить iterator.  В виду того что вы используете JDK 1.5+, свой очень больше
    // четкое и ремонтопригодное использовать Generics вместо бросать возвращение iterator.next ().
    // iий также доработало ваше Кодего итерирования для использования встроенной стройки foreach.
    checkOrders публики пустые (заказы собрания) {
        // выступает защелка с иничиативой для общего количества заказов, вместо резьб.
        //, котор это обеспечивает все заказы обработаны прежде чем этот метод завершает
        окончательное startLatch CountDownLatch = новое CountDownLatch (orders.size ());

        // в виду того что вы используете JDK 1.5+, более легкий для того чтобы прочитать и поддержать если вы используете generics
        // и встроенное foreach вместо iterator
        для (окончательная модель OrderModel: заказы) {
            executorService.submit (новое Runnable () {
                побежали свободное пространство публики, котор () {
                    попытка {
                        Календар теперь = Calendar.getInstance (TimeZone.getTimeZone («Европ/Лондон»));
                        если (isEligibleForClearDown, то (модель, master.getCleardownFields () .getClearDownReqFrom (), теперь)) {
                            если (model.getOrderFields () .hasParentOrderId, то ()) {
                                // добавляет все заказы ребенка к окончательному результату
                                results.add (модель);
                            } еще {
                                // добавляет заказы родителя к списку родителя
                                parentOrders.add (модель);
                            }
                        }
                    } окончательно {
                        // кладя это в окончательно блок обеспечивает он получает вызванным независимо
                        // всех исключений происходят в теле метода
                        startLatch.countDown ();
                    }
                }
            });
        }
        попытка {
            startLatch.await (); ожидание // для всех предметов к вполне обрабатывать
        } задвижка (InterruptedException e) {
            LOGGER.error («прерванное исключение пока ждущ защелку комплекса предпусковых операций до end.");
        }
    }
}
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us