You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "li Gongrong (Jira)" <de...@uima.apache.org> on 2019/09/25 12:37:00 UTC
[jira] [Comment Edited] (UIMA-6129) The thread may deadlock if
other thread interrupted which use jcas
[ https://issues.apache.org/jira/browse/UIMA-6129?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16937686#comment-16937686 ]
li Gongrong edited comment on UIMA-6129 at 9/25/19 12:36 PM:
-------------------------------------------------------------
{code:java}
package com.test.uima;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.apache.uima.UIMAException;
import org.apache.uima.fit.factory.JCasFactory;
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
public class Main {
public static void main(String[] args) throws UIMAException {
JCas jcas = JCasFactory.createJCas();
ExecutorService executorService = Executors.newFixedThreadPool(10);
jcas.setDocumentText("abcdefg");
FutureTask<String> future = new FutureTask<>( () -> {
long t = System.currentTimeMillis();
while (System.currentTimeMillis() - t <= 1000L) {
Annotation annotation = new Annotation(jcas, 0, 2);
annotation.addToIndexes(jcas);
}
return "success";
});
executorService.execute(future);
try {
future.get(20, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
future.cancel(true);
e.printStackTrace();
}
System.out.println(JCasUtil.select(jcas, Annotation.class).size());
System.out.println("Finished select");
System.out.println(JCasUtil.selectCovered(jcas, Annotation.class, 0, 5));
System.out.println("Finished select covered");
System.out.println(JCasUtil.selectCovering(jcas, Annotation.class, 0, 1));
System.out.println("Finished select covering ");
executorService.shutdown();
}
}
{code}
I can't recurrent the jstack in my complex code, but the simple code may caused *ConcurrentModificationException* , is it the same exception? when i do some thing in JCas index and the kill the thread, it will case multy thread exceptions?
uima version: 2.8.1
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
was (Author: gongrong):
{code:java}
package com.test.uima;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.apache.uima.UIMAException;
import org.apache.uima.fit.factory.JCasFactory;
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
public class Main {
public static void main(String[] args) throws UIMAException {
JCas jcas = JCasFactory.createJCas();
ExecutorService executorService = Executors.newFixedThreadPool(10);
jcas.setDocumentText("abcdefg");
FutureTask<String> future = new FutureTask<>( () -> {
long t = System.currentTimeMillis();
while (System.currentTimeMillis() - t <= 1000L) {
Annotation annotation = new Annotation(jcas, 0, 2);
annotation.addToIndexes(jcas);
}
return "success";
});
executorService.execute(future);
try {
future.get(20, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
future.cancel(true);
e.printStackTrace();
}
System.out.println(JCasUtil.select(jcas, Annotation.class).size());
System.out.println("Finished select");
System.out.println(JCasUtil.selectCovered(jcas, Annotation.class, 0, 5));
System.out.println("Finished select covered");
System.out.println(JCasUtil.selectCovering(jcas, Annotation.class, 0, 1));
System.out.println("Finished select covering ");
executorService.shutdown();
}
}
{code}
I can't recurrent the jstack in my complex code, but the simple code may caused *ConcurrentModificationException* , is it the same exception? when i do some thing in JCas index and the kill the thread, it will case multy thread exceptions?
> The thread may deadlock if other thread interrupted which use jcas
> -------------------------------------------------------------------
>
> Key: UIMA-6129
> URL: https://issues.apache.org/jira/browse/UIMA-6129
> Project: UIMA
> Issue Type: Bug
> Components: UIMA
> Affects Versions: 2.10.4SDK
> Reporter: li Gongrong
> Priority: Major
>
> I use FutureTask to kill the thread spend a lot of time,but it will cause deadlock.
> {code:java}
> at sun.misc.Unsafe.park(Native Method)at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x000000070435e808> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at org.apache.uima.jcas.impl.JCasHashMapSubMap.getReserve(JCasHashMapSubMap.java:303) at org.apache.uima.jcas.impl.JCasHashMap.getReserve(JCasHashMap.java:318) at org.apache.uima.jcas.impl.JCasImpl.getJfsFromCaddr(JCasImpl.java:1154) at org.apache.uima.jcas.impl.JCasImpl$JCasFsGenerator.createFS(JCasImpl.java:912) at org.apache.uima.jcas.impl.JCasImpl$JCasFsGenerator.createFS(JCasImpl.java:873) at org.apache.uima.cas.impl.CASImpl.ll_getFSForRef(CASImpl.java:3751) at org.apache.uima.cas.impl.CASImpl.createFS(CASImpl.java:2231) at org.apache.uima.cas.impl.FSIteratorWrapper.get(FSIteratorWrapper.java:63) at org.apache.uima.cas.impl.FSIteratorAggregate.get(FSIteratorAggregate.java:76) at org.apache.uima.cas.impl.FSIteratorImplBase.next(FSIteratorImplBase.java:66) at org.apache.uima.cas.impl.FSIteratorImplBase.next(FSIteratorImplBase.java:32)
> {code}
> why ?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)