powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
25 сообщений из 140, страница 3 из 6
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515239
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerSynchronized - всё в один поток и многопоточности нет тогда.

Ну, при коллизии hash кодов у нас будет compute всегда synchronized. То есть распределение таски по очередям полностью синхронизировано. Разницы вот с этим кодом нет:

Код: java
1.
2.
3.
synchronized(this) {
  taskMap.compute(lambda);
}



Согласен, но распределение это обычно маленькая часть от работы. Во многих случаях это нормально.

А Вы можете предложить более производительный вариант?
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515243
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczquestionerSynchronized - всё в один поток и многопоточности нет тогда.

Ну, при коллизии hash кодов у нас будет compute всегда synchronized. То есть распределение таски по очередям полностью синхронизировано. Разницы вот с этим кодом нет:

Код: java
1.
2.
3.
synchronized(this) {
  taskMap.compute(lambda);
}


Очень показательно, кстати - обсуждать какую-то высосанную из пальца несуществующую проблему и при этом без зазрения совести писать synchronized(this)
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515248
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А то что ThreadPoolImpl#stop() никак не влияет на уже засабмиченные таски и внутренний экзекутор, уже кто-нибудь здесь отписывал?
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515251
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TОчень показательно, кстати - обсуждать какую-то высосанную из пальца несуществующую проблему и при этом без зазрения совести писать synchronized(this)
Не читал но осуждаю? Перечитай ещё раз если ничего не понял.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515255
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TА то что ThreadPoolImpl#stop() никак не влияет на уже засабмиченные таски и внутренний экзекутор, уже кто-нибудь здесь отписывал?
Да, мне тоже не нравится собственный флаг. Я бы пулу потоков его делегировал.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515260
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrei TА то что ThreadPoolImpl#stop() никак не влияет на уже засабмиченные таски и внутренний экзекутор, уже кто-нибудь здесь отписывал?

Да, у меня такой экзекутор, который просто прекращает новые таски принимать. Считаете, что надо таски на полпути прерывать? Такое тоже возможно, но зачем если это не часть задания?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class ThreadPoolExecutor extends AbstractExecutorService {
 ...
 /**
     * Initiates an orderly shutdown in which previously submitted
     * tasks are executed, but no new tasks will be accepted.
     * Invocation has no additional effect if already shut down.
     *
     * <p>This method does not wait for previously submitted tasks to
     * complete execution.  Use {@link #awaitTermination awaitTermination}
     * to do that.
     *
     * @throws SecurityException {@inheritDoc}
     */
    public void shutdown() {



Этого вообще в задании не было



Andrei Очень показательно, кстати - обсуждать какую-то высосанную из пальца несуществующую проблему и при этом без зазрения совести писать synchronized(this)
Показательно, что некоторые люди без зазрения совести могут оставить писать критичные сообщения на форуме даже если ни черта не понимают
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515264
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerДа, у меня такой экзекутор, который просто прекращает новые таски принимать. Считаете, что надо таски на полпути прерывать?

Ну, по-хорошему, если этого в задании нет, то можно было сделать параметром класса.
shutdown() запущные задачи не прерывает. Но те что в очереди уже не будут выполнятся.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515269
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerДа, у меня такой экзекутор, который просто прекращает новые таски принимать. Считаете, что надо таски на полпути прерывать?

Ну, по-хорошему, если этого в задании нет, то можно было сделать параметром класса.
shutdown() запущные задачи не прерывает. Но те что в очереди уже не будут выполнятся.

Можно, только зачем на это время тратить если никто не просил?

я имел ввиду, что никто не делает interrupt тредам. Да, если бы сделал это, конечно, было бы больше похоже на jdk тредпул, но не считаю это проблемой. я вообще это сделал, чтобы приложение у меня заканчивало работу.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515273
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerAndrei TА то что ThreadPoolImpl#stop() никак не влияет на уже засабмиченные таски и внутренний экзекутор, уже кто-нибудь здесь отписывал?

Да, у меня такой экзекутор, который просто прекращает новые таски принимать. Считаете, что надо таски на полпути прерывать? Такое тоже возможно, но зачем если это не часть задания?

Не надо никого прерывать на полпути. Важно отменить накопившуюся очередь задач, которая в реальной системе может быть значительного размера. Иначе твой экзекутор будет продолжать выполнять ранее засабмиченные задачи еще продолжительное время после вызова stop().

questionerAndrei Очень показательно, кстати - обсуждать какую-то высосанную из пальца несуществующую проблему и при этом без зазрения совести писать synchronized(this)
Показательно, что некоторые люди без зазрения совести могут оставить писать критичные сообщения на форуме даже если ни черта не понимают
Ты какой-то нервный. Что конкретно, по-твоему, я не понимаю? Не то что бы мне было очень интересно, но раз уж нахамил, было бы логично продолжить мысль.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515274
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAndrei TОчень показательно, кстати - обсуждать какую-то высосанную из пальца несуществующую проблему и при этом без зазрения совести писать synchronized(this)
Не читал но осуждаю? Перечитай ещё раз если ничего не понял.
Что в твоей писуле можно не понять? this - это ThreadPoolImpl из изначального поста?
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515276
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerBlazkowiczпропущено...

Ну, по-хорошему, если этого в задании нет, то можно было сделать параметром класса.
shutdown() запущные задачи не прерывает. Но те что в очереди уже не будут выполнятся.

Можно, только зачем на это время тратить если никто не просил?

я имел ввиду, что никто не делает interrupt тредам. Да, если бы сделал это, конечно, было бы больше похоже на jdk тредпул, но не считаю это проблемой. я вообще это сделал, чтобы приложение у меня заканчивало работу.
Ты не считай, а сделай Thread.sleep(Integer.MAX_VALUE) в таске и проверь, как твое приложение закончит работу.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515277
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerМожно, только зачем на это время тратить если никто не просил?
Ну, как это никто не просил. Флаг же зачем-то добавили? Значит нужен корректный шатдаун?

questionerя имел ввиду, что никто не делает interrupt тредам.

Это понятно. Interrupt будет только в shutdownNow(), в shutdown() его не будет.

questionerя вообще это сделал, чтобы приложение у меня заканчивало работу.
Ну, вот есть задача разработать очередь задачь. Она как бы и подразумевает что очередь должне уметь корректно завершаться.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515279
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TЧто в твоей писуле можно не понять? this - это ThreadPoolImpl из изначального поста?
Что это тебя писули забеспокоили? Это демонстрация поведения, а не код для использования. Но не только лишь все могут понять.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515284
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrei TBlazkowiczпропущено...

Не читал но осуждаю? Перечитай ещё раз если ничего не понял.
Что в твоей писуле можно не понять? this - это ThreadPoolImpl из изначального поста?
Код: java
1.
2.
3.
synchronized(this) {
  taskMap.compute(lambda);
}


Ок, объясню, попробую хотя бы.

Мапа делится на сегменты. То есть сегмент это кусочек мапы. Так вот, в ConcurrentHashMap мутабельные операции для сегмента выполняются последовательно.

Но важно понимать, что эта последовательная операция достаточно короткая. Сами таски выполняются в отдельных тредах.

А невежливы к Вам потому, что Вы прилетели с бухты барахты, нихрена не разобрались и начали критиковать.
Опять же, можете лучше предложить решение?
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515290
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerМожно, только зачем на это время тратить если никто не просил?
Ну, как это никто не просил. Флаг же зачем-то добавили? Значит нужен корректный шатдаун?

questionerя имел ввиду, что никто не делает interrupt тредам.

Это понятно. Interrupt будет только в shutdownNow(), в shutdown() его не будет.

questionerя вообще это сделал, чтобы приложение у меня заканчивало работу.
Ну, вот есть задача разработать очередь задачь. Она как бы и подразумевает что очередь должне уметь корректно завершаться.

Ок, согласен, что не уделил этому аспекту большого внимания ибо посчитал его малозначащим в рамках этой задачи.

Вопрос как корректно останавливать тредпул это всё же вопрос дискуссионный. в рамках этой задачи я посчитал, что задачи важны и нельзя заканчивать работу пока есть необработанные задачи.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515302
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вимба, тем временем, не пришел. :(
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515305
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAndrei TЧто в твоей писуле можно не понять?
Что это тебя писули забеспокоили?
Ты так говоришь, как будто это что-то плохое. Код люди разной ориентации пишут, знаешь ли. В приличном обществе твой юмор бы не оценили. Но на отечественном форуме ты, конечно, просто записной остряк.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515311
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    ...
    myTask.run();
    try {
          countDownLatch.await();
    } catch (InterruptedException e) {
          logger.error("Thread pool thread was interrupted", e);
    }
    ...


Вот кстати рабочий вариант ...

Нерабочий. questioner в пул кидают(в основном) долгоиграющие таски, верно? А какая по твоему самая распространенная в нашем мире причина, по которой таска планировалась выполняться долго, но завершилась моментально сразу после своего запуска? Переписывай с на try/finally короче.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515317
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerAndrei Tпропущено...

Что в твоей писуле можно не понять? this - это ThreadPoolImpl из изначального поста?
Код: java
1.
2.
3.
synchronized(this) {
  taskMap.compute(lambda);
}


Ок, объясню, попробую хотя бы.

Мапа делится на сегменты. То есть сегмент это кусочек мапы. Так вот, в ConcurrentHashMap мутабельные операции для сегмента выполняются последовательно.

Но важно понимать, что эта последовательная операция достаточно короткая. Сами таски выполняются в отдельных тредах.
Я, если честно, про твои сегменты и время операций даже не думал. synchronized(this) - это хорошо известный антипаттерн (в большинстве случаев). Обычно сходятся на том, что следует явно указывать модификатор synchronized в сигнатуре public метода.

questionerА невежливы к Вам потому, что Вы прилетели с бухты барахты, нихрена не разобрались и начали критиковать.
Опять же, можете лучше предложить решение?

Я никуда не прилетал, это, на секундочку, общий форум, а не твой личный чат (хотя я не навязываюсь). Мне твое решение как раз изначально понравилось как компактное и элегантное, о чем я написал еще на первой странице (и там же - об еще одной баге, которую я изначально заметил). Также я тебе в другой твоей теме про экзекутор скидывал ссылку на свой код на гитхабе, который решает примерно те же задачи, что стоят перед тобой.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515319
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vimba,

Ну допустим. там уже предложили вариант полаконичнее с whenCompleteAsync
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515321
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrei T,
Andrei TЯ, если честно, про твои сегменты и время операций даже не думал. synchronized(this) - это хорошо известный антипаттерн (в большинстве случаев). Обычно сходятся на том, что следует явно указывать модификатор synchronized в сигнатуре public метода.
Вот мы и поняли, что не думал, а это очень важно. А взял и осудил)

Вторую часть фразы я пожалуй не буду комментировать.
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515325
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vimba,

Код: java
1.
2.
3.
4.
5.
6.
7.
        CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
            System.out.println("Task with exception");
            throw new RuntimeException();
        });
        Thread.sleep(100);

        future.whenCompleteAsync((r, e) -> System.out.println("Main thread"));



авторTask with exception
Main thread

Если имелось ввиду то, что whenComplete(Async) может не выполниться, то это не правда
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515326
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    public static void main(String[] args) throws InterruptedException {
        CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Task with exception");
            throw new RuntimeException();
        });
        Thread.sleep(100);

        future.whenCompleteAsync((r, e) -> System.out.println("Main thread"));
        Thread.sleep(2000);


авторTask with exception
Main thread


Ну и так тоже
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515343
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TЯ, если честно, про твои сегменты и время операций даже не думал. synchronized(this) - это хорошо известный антипаттерн (в большинстве случаев). Обычно сходятся на том, что следует явно указывать модификатор synchronized в сигнатуре public метода.

Пипец. Капитан очевидность не унимается. Тут вообще-то все в курсе как использовать synchronized. Это была иллюстрация того как будет работать код при коллизии хэшей.
Термин "иллюстрация" объяснить?
...
Рейтинг: 0 / 0
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
    #39515363
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerСогласен, но распределение это обычно маленькая часть от работы. Во многих случаях это нормально.
А Вы можете предложить более производительный вариант?
А "производительность" она в многопоточности штука относительная. Мы же не знаем ни на сколько конкурентной будет борьба за критические ресурсы, ни на сколько часто у будут пересекаться ключи. В зависимости от подобных параметров разные решения будут выдавать разную производительность.
...
Рейтинг: 0 / 0
25 сообщений из 140, страница 3 из 6
Форумы / Java [игнор отключен] [закрыт для гостей] / Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]