Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算线程引发的异常数?_Java_Multithreading_Exception - Fatal编程技术网

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。您将能够在集中的位置访问可丢弃的对象,并能够在无需将可赎回债券更改为期货