Java 如何计算线程引发的异常数?
我有以下代码:Java 如何计算线程引发的异常数?,java,multithreading,exception,Java,Multithreading,Exception,我有以下代码: @Test public void setUserNamePropertyFromMultiThreadsUpdatesCorrectly() throws Exception { boolean oldVal = UsersConfig.s.NO_DB_MODE; final List<String> lastName = new ArrayList<String>(); UsersConfig.s.NO_DB_M
@Test
public void setUserNamePropertyFromMultiThreadsUpdatesCorrectly() throws Exception {
boolean oldVal = UsersConfig.s.NO_DB_MODE;
final List<String> lastName = new ArrayList<String>();
UsersConfig.s.NO_DB_MODE = true;
String user1 = testUtils.generateUserName();
final Long createdId = testUtils.createUserWithProperties(ImmutableMap.of("username", user1, "A", "A1",
"isStaff", "true"));
List<Callable<Void>> callables = new ArrayList<Callable<Void>>();
for (int i = 0; i < 20; i++) {
callables.add(new Callable<Void>() {
@Override
public Void call() throws Exception {
String user2 = testUtils.generateUserName();
boolean isSuccess = usersServerAccess.setProperties(createdId,
ImmutableMap.of("isStaff", "dont_know", "username", user2),
1, "test set", someTimeOut);
assertTrue(isSuccess);
synchronized (lastName) {
lastName.add(user2);
}
return null;
}
});
ExecutorService executorService = Executors.newFixedThreadPool(10);
try {
executorService.invokeAll(callables);
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
User returnedUser = usersServerAccess.getUser(createdId, "get test", someTimeOut);
assertThat(returnedUser.getProperty("username"), equalTo(lastName.get(0)));
assertThat(returnedUser.getProperty("A"), equalTo("A1"));
assertThat(returnedUser.getProperty("isStaff"), equalTo("dont_know"));
}
@测试
public void setUserNamePropertyFromMultiThreadsUpdatesCorrectly()引发异常{
布尔值oldVal=UsersConfig.s.NO_DB_模式;
最终列表lastName=new ArrayList();
UsersConfig.s.NO_DB_MODE=true;
字符串user1=testUtils.generateUserName();
final Long createdId=testUtils.createUserWithProperties(ImmutableMap.of(“用户名”),user1,“A”,“A1”,
“isStaff”、“true”);
List callables=new ArrayList();
对于(int i=0;i<20;i++){
add(newcallable()){
@凌驾
public Void call()引发异常{
字符串user2=testUtils.generateUserName();
布尔isSuccess=usersServerAccess.setProperties(createdId,
ImmutableMap.of(“isStaff”,“不知道”,“用户名”,user2),
1,“测试集”,超时);
资产真实性(isSuccess);
已同步(姓氏){
lastName.add(user2);
}
返回null;
}
});
ExecutorService ExecutorService=Executors.newFixedThreadPool(10);
试一试{
executorService.invokeAll(可调用项);
executorService.shutdown();
执行人服务。等待终止(1,时间单位。分钟);
}捕捉(中断异常e){
e、 printStackTrace();
抛出新的运行时异常(e);
}
User returnedUser=usersServerAccess.getUser(createdId,“get test”,someTimeOut);
资产(returnedUser.getProperty(“用户名”)、equalTo(lastName.get(0));
资产(returnedUser.getProperty(“A”)、equalTo(“A1”);
资产(returnedUser.getProperty(“isStaff”)、equalTo(“不知道”);
}
我想断言没有线程抛出异常
我该怎么做
我可以将
future
列表保存在一边。但是接下来呢?当您在future上执行get()
时,您可能会得到ExecutionException,然后只需使用getCause()
返回实际异常。当您在future上执行get()
时,您可能会得到ExecutionException,然后只需使用getCause()
它将返回实际异常。当您在将来执行get()
时,您可能会得到ExecutionException,然后只需使用getCause()
它将返回实际异常。当您在将来执行get()
时,您可能会得到ExecutionException,然后只需使用getCause())
将返回实际异常。与User15837的想法不同,您可以实现自己的ThreadPoolExecutor子类,并重写。而不是使用该类而不是Executors.newFixedThreadPool。您将可以在集中的位置访问一次性文件,能够对其进行计数,并且无需将可调用项更改为未来项。与User15837的想法不同,您可以使用重写的实现自己的ThreadPoolExecutor子类,而不是使用该类而不是Executors.newFixedThreadPool。您可以在集中的位置访问可丢弃项,并能够对其进行计数,然后不需要将可调用对象更改为未来对象。与User15837的想法不同,您可以使用重写的实现自己的ThreadPoolExecutor子类,而不是使用该类而不是Executors.newFixedThreadPool。您将可以在集中的位置访问可丢弃的对象,并能够对它们进行计数,然后无需将可调用对象更改为未来对象。或者与User15837的想法不同,您可以实现自己的ThreadPoolExecutor子类,并重写。而不是使用该类而不是Executors。newFixedThreadPool。您将能够在集中的位置访问可丢弃的对象,并能够在无需将可赎回债券更改为期货