相关疑难解决方法(0)

究竟是什么"不允许自我抑制",为什么Javac会产生导致此错误的代码?

这个新的Java 7 try-with-resources构造非常好.或者至少,这很好的,直到一个例外走过来,毁了我的一天.

我终于把它归结为一个可重复的测试,它只使用JUnit + jMock.

@Test
public void testAddSuppressedIssue() throws Exception {
    Mockery mockery = new Mockery();
    final Dependency dependency = mockery.mock(Dependency.class);

    mockery.checking(new Expectations() {{
        allowing(dependency).expectedCall();
        allowing(dependency).close();
    }});

    try (DependencyUser user = new DependencyUser(dependency)) {
        user.doStuff();
    }
}

// A class we're testing.
private static class DependencyUser implements Closeable {
    private final Dependency dependency;

    private DependencyUser(Dependency dependency) {
        this.dependency = dependency;
    }

    public void doStuff() {
        dependency.unexpectedCall(); // bug
    }

    @Override
    public void close() throws IOException { …
Run Code Online (Sandbox Code Playgroud)

java exception java-7 try-with-resources

14
推荐指数
1
解决办法
6296
查看次数

Java:Exception类是线程安全的吗?

据我所知,Java的Exception类肯定不是不可变的(类似的方法,initCausesetStackTrace提供一些线索).它至少是线程安全的吗?假设我的一个类有一个这样的字段:

private final Exception myException;
Run Code Online (Sandbox Code Playgroud)

我可以安全地将此字段暴露给多个线程吗?我不愿意讨论具体情况,以及为什么会出现这种情况.我的问题更多的是关于这个原则:我可以告诉一个暴露Exception类型字段的类是线程安全的吗?

另一个例子:

class CustomException extends Exception
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

这个类是线程安全的吗?

java exception thread-safety

8
推荐指数
1
解决办法
1281
查看次数

如果抛出两次,预分配的OutOfMemoryError如何真实地实现Throwable.getStackTrace?

这是一个后续问题,当没有足够的内存来抛出OutOfMemoryError时会发生什么?

我的问题如下:如果a OutOfMemoryError是预分配的(为了避免OutOfMemoryError对象的内存不足的情况)并且JVM必须抛出这种类型的错误两次或更多次,那么预分配对象如何真实地实现该getStackTrace方法?

如果重用同一个对象,那么其中一个对象很可能会失效getStackTrace,不是吗?

java out-of-memory

2
推荐指数
1
解决办法
218
查看次数