Conversation
| } | ||
| // можно запустить executor на виртуальных потоках | ||
| // this.executor = Executors.newVirtualThreadPerTaskExecutor(); | ||
| this.executor = Executors.newFixedThreadPool(numProgrammers + numWaiters); |
There was a problem hiding this comment.
Вопрос заранее на защиту: расскажите офлайн потом, почему вы выбрали такой экзекутор. Есть же куча других. Будет здорово, если подкрепите замерами
| public Waiter(int id, Kitchen kitchen) { | ||
| this.id = id; | ||
| this.kitchen = kitchen; | ||
| this.programmerQueue = new LinkedBlockingQueue<>(); |
There was a problem hiding this comment.
Почему вы выбрали эту стркутуру? Как у вас обеспечивается равномерность накормленности?
There was a problem hiding this comment.
Заменил на PriorityBlockingQueue
| secondSpoon.acquire(); | ||
| try { | ||
| System.out.println("Programmer " + id + " is eating (" + (mealsEaten.get() + 1) + " meal)"); | ||
| mealsEaten.incrementAndGet(); |
There was a problem hiding this comment.
Если я правильно понял, то они у вас едят мгновенно. Попробуйте добавть слип на случайное время, или каждый программист ест за свое какое то время константное, не важно, главное чтобы не у всех было одинаковое
| synchronized (this) { | ||
| while (!permissionToEat.get() && running && waiter.isKitchenOpen()) { | ||
| wait(200); | ||
| if (!permissionToEat.get() && waiter.isKitchenOpen()) { |
There was a problem hiding this comment.
Как будто лишний кусок кода -- как будто достаточно просто положить в очередь. Либо расскажите, зачем такая эвристика
|
|
||
| public class Main { | ||
|
|
||
| public static void main(String[] args) { |
There was a problem hiding this comment.
Понимаю, что вы потестили через мейн. Но чисто по условиям таски -- сделайте пж несколько тестов. Можно в качестве ассертов проверять равномерность накормленности. А так достаточно тестов на успешное выполнение для нескольких конфигураций
| } | ||
|
|
||
| private void think() throws InterruptedException { | ||
| System.out.println("Programmer " + id + " is thinking"); |
There was a problem hiding this comment.
Как будто они у вас думают мгновенно. См. коммент про время приема пищи
add sleep on eat and thinking remove unnecessary reordering by programmer
No description provided.