在Java应用程序中运行多个线程

时间:2017-11-09 11:35:31

标签: java multithreading threadpool

我需要在Java应用程序中执行并行任务。现在,我有一个实现Callable<DMI>的java类,其中DMI是我在JSF bean中使用的对象。

问题是所有Callable对象都在同一个线程中运行,然后只有在完全执行所有这些对象之后,线程才会发生变化。我想在不同的线程上运行每个对象。我究竟做错了什么?

类可调用

 public class ModuloCallable implements Callable<DMI> {

    private final String NOME;
    private final String URL;

    public ModuloCallable(String nome, String url) {
        this.NOME = nome;
        this.URL = url;
    }

    @Override
    public DMI call() {

        try {   

                /* Some code here to generate a DMI object */

                System.out.println("Thread number: " + Thread.currentThread().getId());

                return dmi;

            }

        } catch (NullPointerException e) {                

            return null;

        }

        return null;

    }
}

Java应用程序

public void buscar() {
        ExecutorService executor = Executors.newCachedThreadPool();
        ModuloCallable G1C = new ModuloCallable("n1", "url1") 
        ModuloCallable G2C = new ModuloCallable("n2","url2");
        ModuloCallable G3C = new ModuloCallable("n3","url3");
        DMI geradorG1 = getFutureValue(G1C, executor);
        DMI geradorG2 = getFutureValue(G2C, executor);
        DMI geradorG3 = getFutureValue(G3C, executor);
        executor.shutdown();
    }
   public DMI getFutureValue(ModuloCallable mc, ExecutorService e) {
        Future<DMI> f = e.submit(mc);
        DMI dmi;
        try {
            dmi = f.get();
            return dmi;
        } catch (InterruptedException | ExecutionException ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }
}

输出示例

Thread number: 150
Thread number: 150
Thread number: 150

如果我按顺序多次调用buscar方法,那么我会有类似的东西:

Thread number: 150
Thread number: 150
Thread number: 150
Thread number: 151
Thread number: 151
Thread number: 151

我想要类似的东西:

Thread number: 148
Thread number: 149
Thread number: 150

0 个答案:

没有答案