Java8 Lambda 表达式与 Checked Exception

当我们在使用 Java 8 的 Lambda 表达式时,表达式内容需要抛出异常,也许还会想当然的让当前方法再往外抛来解决编译问题,如下面的代码

main() 方法抛出 Exception 还是不解决决编译错误,仍然提示 "Unhandled exception: java.io.FileNotFoundException"。

因为我们可能保持着惯性思维,忽略了 Lambda 本身就是一个功能性接口方法的实现,所以把上面的代码还原为匿名类的方式

public void foo() {
    Stream.of("a", "b").forEach(new Consumer<String>() {
        @Override
        public void accept(String s) {
            new FileInputStream(s).close();
        }
});

那么对于上面那种情况应该如何处理呢? 阅读全文 >>

类别: Java8. 标签: , , . 阅读(98). 评论(0) »

使用 JDK 5 后的线程并发,Callable, Future, ExecutorServie ...

被问及 Java 多线程,多会想到 Thread, Runnable,更通常是用 new Thread(){public void run(){...}}.start() 来启动一个线程。那都是 JDK 1.5 之前的年代了,现在还这么回答就 Out 了。用用  JDK 1.5 给我们带来的  java.util.concurrent 吧,更酷了。这里不涉及它的并发集合类,同步互斥机制,只说线程及线程池的应用举例。

1. 新的启动线程的方式:

    public static void main(String[] args) throws Exception {
        Callable<Integer> callable = new Callable<Integer>() {
            public Integer call() throws Exception {
                System.out.println("callable executed.");
                return new Random().nextInt(100);
            }
        };
        
        FutureTask<Integer> future = new FutureTask<Integer>(callable);
        new Thread(future).start();
        
        System.out.println("do your things here");
        
        System.out.println(future.get());
    }

阅读全文 >>

类别: Java/JEE. 标签: , , . 阅读(638). 评论(0) »