小编sol*_*4me的帖子

Java死锁代码说明

有人可以解释为什么以下代码导致死锁.我的理解是,当alphonse(线程)运行然后它获取对朋友obj的锁定,因为它调用bow()方法但是gaston(另一个线程)如何能够在alphonse尚未完成时获取同一朋友obj上的锁定/释放朋友obj的锁定.

public class Deadlock {
static class Friend {
    private final String name;
    public Friend(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public synchronized void bow(Friend bower) {
        System.out.println("invoked by " + name);
        System.out.format("%s: %s"
            + "  has bowed to me!%n", 
            this.name, bower.getName());
        bower.bowBack(this);
        System.out.printf("finished by " + name);
    }
    public synchronized void bowBack(Friend bower) {
        System.out.format("%s: %s"
            + " has bowed back to me!%n",
            this.name, bower.getName());
        System.out.println("exiting bowBack()");
    }
}

public static void …
Run Code Online (Sandbox Code Playgroud)

java multithreading

4
推荐指数
1
解决办法
340
查看次数

Spring集成注释Java 8可选的错误处理

我正在使用Spring启动1.2.2.Release和Java 8,问题是Spring Optional payload在传递它时多次包装到新的Optional对象中transformer/service activator.例如

@ServiceActivator(inputChannel = ..., outputChannel = ...) 
public Optional<Foo> transform() {returns -> Optional.of(foo);}

@ServiceActivator(inputChannel = ..., outputChannel = ...)
public Optional<Foo> doSomething1(Optional<Foo> payload) {
     payload.ifPresent(f -> {System.out.println(f.getId());}); // this line throws ClassCastException 
  return foo;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出ClassCastExcpetion(无法将java.util.Optional强制转换为Foo)的原因是因为payload而不是包含foo值包含另一个可选对象,而Optional对象包含foo为value.

我已经在这里提到了这个

现在,Spring Integration始终处理Java 8的Optional类型.

我甚至尝试过使用文档中提到的框架的确切版本但没有成功

解决方法:我尝试创建一些包含有效负载的Wrapper(PayloadWrapper)对象,它可以工作.但可能还有其他一些方法吗?

java spring spring-integration java-8 spring-boot

3
推荐指数
1
解决办法
410
查看次数