Лоты для потоков ждут ForkJoinPool - PullRequest
0 голосов
/ 05 ноября 2018

Мое java-приложение перестало работать. Просматривая дамп стека, я обнаружил, что существует 28 потоков, ожидающих определенного потока. Я использую newSingleThreadScheduledExecutor при запуске приложения и прекращаю его во время закрытия приложения.

Я не уверен, что делать дальше. Это коренная причина проблемы или я что-то упустил?

"ForkJoinPool.commonPool-worker-29" #1326 daemon prio=5 os_prio=0 tid=0x00007ff8d8054000 nid=0x2644 waiting on condition [0x00007ff87154a000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)

Grep результат от дампа стека

- parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)
    - parking to wait for  <0x00000000804e10c8> (a java.util.concurrent.ForkJoinPool)

1 Ответ

0 голосов
/ 05 ноября 2018

ForkJoinPool используется операциями параллельного потока. Вам следует пересмотреть, как вы используете вызов parallel() в своих потоках (и - возможно, - переосмыслить его, поскольку ожидание подразумевает либо блокировку, либо синхронизацию, и ни один из них не должен использоваться внутри параллельных потоков).

...