Как использовать, ожидают и уведомляют в Java без IllegalMonitorStateException?

Это было бы довольно простым промежуточным ПО Ring:

(defn wrap-dir-index [handler]
  (fn [req]
    (handler
     (update-in req [:uri]
                #(if (= "/" %) "/index.html" %)))))

Просто оберните ваши маршруты с помощью этой функции, и запросы на / преобразуются в запросы на /index.html до того, как остальная часть вашего кода увидит им.

(def app (-> (routes (your-dynamic-routes)
                     (resources "/"))
             (...other wrappers...)
             (wrap-dir-index)))
128
задан Radiodef 11 June 2018 в 14:48
поделиться

4 ответа

Чтобы иметь возможность вызывать notify () , вам необходимо выполнить синхронизацию на том же объекте.

synchronized (someObject) {
    someObject.wait();
}

/* different thread / object */
synchronized (someObject) {
    someObject.notify();
}
212
ответ дан 24 November 2019 в 00:35
поделиться

Вы можете вызывать notify только для объектов, монитор которых у вас есть. Итак, вам нужно что-то вроде

synchronized(threadObject)
{
   threadObject.notify();
}
7
ответ дан 24 November 2019 в 00:35
поделиться

Вам вообще нужно это потоковое? Мне интересно, насколько велики ваши матрицы, и есть ли какая-то польза от печати одним потоком, в то время как другой выполняет умножение.

Возможно, стоит измерить это время, прежде чем выполнять относительно сложную работу с потоками?

Если вам действительно нужно его распределять, я бы создал 'n' потоков для выполнения умножения ячеек (возможно, 'n' - это количество доступных вам ядер), а затем используйте механизм ExecutorService и Future для одновременной отправки нескольких умножений.

Таким образом, вы можете оптимизировать работу в зависимости от количества ядер и использовать инструменты потоковой передачи Java более высокого уровня (которые должны облегчить жизнь). Запишите результаты обратно в принимающую матрицу, а затем просто распечатайте ее, когда все ваши будущие задачи будут выполнены.

20
ответ дан 24 November 2019 в 00:35
поделиться

notify () также необходимо синхронизировать

6
ответ дан 24 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: