Several Java threads WAITING in worker

Hi, in our worker application I see several threads in WAITING state, for workflows that already completed, like this one.

Do you know how to avoid this? Thanks!

This is part of the output from jstack:

"workflow-method-MyWorkflow" #179 [294] prio=5 os_prio=0 cpu=90.92ms elapsed=22651.97s tid=0x00007f5ff80a3570 nid=294 waiting on condition  [0x00007f5fb29f1000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@21.0.2/Native Method)
        - parking to wait for  <0x0000000767c29b60> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@21.0.2/LockSupport.java:371)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.2/AbstractQueuedSynchronizer.java:519)
        at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.2/ForkJoinPool.java:3780)
        at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.2/ForkJoinPool.java:3725)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.2/AbstractQueuedSynchronizer.java:1707)
        at io.temporal.internal.sync.WorkflowThreadScheduler.yieldLocked(WorkflowThreadScheduler.java:57)
        at io.temporal.internal.sync.WorkflowThreadContext.yield(WorkflowThreadContext.java:90)
        at io.temporal.internal.sync.WorkflowThreadImpl.yield(WorkflowThreadImpl.java:393)
        at io.temporal.internal.sync.WorkflowThread.await(WorkflowThread.java:47)
        at io.temporal.internal.sync.CompletablePromiseImpl.getImpl(CompletablePromiseImpl.java:85)
        at io.temporal.internal.sync.CompletablePromiseImpl.get(CompletablePromiseImpl.java:75)
        at io.temporal.internal.sync.ActivityStubBase.execute(ActivityStubBase.java:45)
        at io.temporal.internal.sync.ActivityInvocationHandler.lambda$getActivityFunc$0(ActivityInvocationHandler.java:83)
        at io.temporal.internal.sync.ActivityInvocationHandler$$Lambda/0x00007f6028c23968.apply(Unknown Source)
        at io.temporal.internal.sync.ActivityInvocationHandlerBase.invoke(ActivityInvocationHandlerBase.java:68)
        at jdk.proxy2.$Proxy71.update(jdk.proxy2/Unknown Source)
...

In this case, for example, the activity method is update. From the Temporal UI, I don’t see any problem in the call to this method.

These are from cached workflows. Closed workflows are not always removed from the cache, which is not a problem as the cache is LRU.