А почему отмели решение собеседуемого с wait, notify с synchronized секцией на this? Вроде тоже подходит и при этом мы не будем сидеть в цикле бесконечном.
Потому что автор не настолько сильно шарит в многопоточке либо не было времени ждать собеседующего)))) можно и через wait notify sync+while, можно через семафоры, можно через lock
@@psyhotel4009 просто скачиваешь последнюю версию 24 года и тебе идея просто подсказывает кусками кода. Возможно это только на ultimate, у меня тоже такие подсказки есть. Можно еще подключить на этой версии AI assistant, но там это за 8 долларов дополнительно. Поэтому тот парень отдельно ничего не устанавливал.
Крутое и интересное видео, никогда не было задач на лайв-кодинге с многопоточкой и сам решил попробовать сделать. Сделал другое решение, можешь подсказать нормально ли такой вариант? - public class Printer { private final Lock lock = new ReentrantLock(); private final Condition firstCondition = lock.newCondition(); private final Condition secondCondition = lock.newCondition(); public void first(Runnable printFirst) { lock.lock(); try { printFirst.run(); firstCondition.signal(); } finally { lock.unlock(); } } public void second(Runnable printSecond) { lock.lock(); try { firstCondition.awaitUninterruptibly(); printSecond.run(); secondCondition.signal(); } finally { lock.unlock(); } } public void third(Runnable printThird) { lock.lock(); try { secondCondition.awaitUninterruptibly(); printThird.run(); } finally { lock.unlock(); } } }
Привет, спасибо за фидбек! Выглядит все корректно, отработать должно. Ты можешь на литкоде забить свой код и проверить) Я оттуда задачку брал leetcode.com/problems/print-in-order/ Можно также просто в IDE локально запустить 3 потока и проверить работу, корректно ли все
Забирай бесплатные материалы от меня по изучению Java и подготовки к собеседованиям: t.me/JavaLearnBot?start=c1724626210163-41-ds
Через CountDownLatch ждать с 3 до 0. Добавлять Runnable в массив сразу в нужное место. Потом через Feature брать из массива.
Спать надо в это время!) посмотрю в записи.
Интересна тема exception handling, logging в потоках.
К сожалению это даже не джун
А почему отмели решение собеседуемого с wait, notify с synchronized секцией на this?
Вроде тоже подходит и при этом мы не будем сидеть в цикле бесконечном.
Такой же вопрос
Потому что автор не настолько сильно шарит в многопоточке либо не было времени ждать собеседующего)))) можно и через wait notify sync+while, можно через семафоры, можно через lock
Над лайв кодингом нужно поработать, уж какие-то ошибки детские. Может волнение?
Семафоры можно использовать
Imposter syndrome when somebody watching you ....
И еще вопрос, для каких задач виртуальные поьоки подходят пдохо и лучше подходят стандартные потоки?
В java разве не все потоки виртуальные ?)
@@maksimus.ssirotkin1124 нет ;) есть отдеьныйивид виртуальных
@@maksimus.ssirotkin1124 системные, и грин потоки + вирутальные
какой искуственный интелект у него внедрен в intellij ? как называется ? Copilot ?
@@psyhotel4009 просто скачиваешь последнюю версию 24 года и тебе идея просто подсказывает кусками кода. Возможно это только на ultimate, у меня тоже такие подсказки есть. Можно еще подключить на этой версии AI assistant, но там это за 8 долларов дополнительно. Поэтому тот парень отдельно ничего не устанавливал.
Крутое и интересное видео, никогда не было задач на лайв-кодинге с многопоточкой и сам решил попробовать сделать. Сделал другое решение, можешь подсказать нормально ли такой вариант? -
public class Printer {
private final Lock lock = new ReentrantLock();
private final Condition firstCondition = lock.newCondition();
private final Condition secondCondition = lock.newCondition();
public void first(Runnable printFirst) {
lock.lock();
try {
printFirst.run();
firstCondition.signal();
} finally {
lock.unlock();
}
}
public void second(Runnable printSecond) {
lock.lock();
try {
firstCondition.awaitUninterruptibly();
printSecond.run();
secondCondition.signal();
} finally {
lock.unlock();
}
}
public void third(Runnable printThird) {
lock.lock();
try {
secondCondition.awaitUninterruptibly();
printThird.run();
} finally {
lock.unlock();
}
}
}
Привет, спасибо за фидбек!
Выглядит все корректно, отработать должно. Ты можешь на литкоде забить свой код и проверить) Я оттуда задачку брал leetcode.com/problems/print-in-order/
Можно также просто в IDE локально запустить 3 потока и проверить работу, корректно ли все
Если случится spurious wakeup, awaitUninterruptibly() завершится до того, как другой поток вызовет signal(), и порядок вывода нарушится
Thread3, Thread2, Thread1 с помошью join
В условиях задачи ты можешь менять только код класса, у тебя нет доступа к потокам. Так что такое решение не пройдет