У меня есть объект, который используется для обновления базы данных с использованием многопоточной методологии.Java получает количество экземпляров потоков
Теперь я не хочу разрушать мое соединение db, подавляя его попытками обновления, и хочу дождаться, если у меня будет определенное количество потоков.
мой класс, который implements Runnable
называется updateUnmarked
.
сейчас, я хочу только начать новую тему, если мой счет нити < X
Thread.getAllStackTraces().keySet().size()
не похоже на работу, а также следующее, кажется, не решить:
public static int getLiveThreads(){
ThreadMXBean bean = null;
bean = ManagementFactory.getThreadMXBean();
return bean.getThreadCount();
}
как return 8 only ... но я определенно имею более 8 потоков.
Любая идея, как это сделать?
Спасибо !!!
Я думаю, было бы проще, если бы вы просто использовали семафор для критической части разреза (использование БД), так что вы создать столько потоки, которые вам нужны, и те, у которых нет семафора, будут ждать его. Кроме того, если вы используете большое количество подключений к БД, возможно, менеджер соединений с DB, такой как c3p0, который поддерживает объединение пулов, может оказаться полезным (так что вам не нужно постоянно открывать и закрывать соединения, поскольку это обычно тяжелая операция). – SJuan76
Просто используйте пул потоков с фиксированным размером – artbristol
@artbristol: хорошая точка. вот хорошая ссылка с примерами http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using-executors-and-threadpoolexecutor.html –