有两种方法可以提交和轮询任务结果
FutureTask futureTask = new FutureTask<String>(callable);
Run Code Online (Sandbox Code Playgroud)
使用Callable和的组合Future并提交ExecutorService.使用检索结果future.get().
Future future = service.submit(callable);
Run Code Online (Sandbox Code Playgroud)使用FutureTask.这将使用包装Callable然后检索结果FutureTask.
service.execute(task);
Run Code Online (Sandbox Code Playgroud)使用FutureTaskover Callable+ Future组合有什么好处?
我使用ConcurrentSkipListSet并使用contains方法.
根据JAVA doc for contains方法
如果此set包含指定的元素,则返回true.更正式地说,当且仅当此集合包含o.equals(e)的元素e时才返回true.
但根据我的测试,似乎不使用equals方法,而是比较器是强制性的.请帮助我理解JAVA规范和实现之间的这种异常
ConcurrentSkipListSet
/***如果使用比较,返回ComparableUsingComparator,否则*投键具有可比性,这可能会导致ClassCastException异常, *其传播回调用者.*/private可比较(对象键)
在java.util.concurrent.ConcurrentSkipListMap.comparable(ConcurrentSkipListMap.java:663)在java.util.concurrent.ConcurrentSkipListMap.doGet(ConcurrentSkipListMap.java:821)在java.util.concurrent.ConcurrentSkipListMap.containsKey(ConcurrentSkipListMap.java:1608 )
我正在使用Oracle JDK 7