如何从线程返回多个值以及如何处理此值

时间:2012-05-09 17:22:15

标签: java multithreading return-value

我是Java窗口应用程序的新手。我需要创建一个运行脚本的Java工具。脚本像- .txt file一样运行,并提供以下输出:

line 1   
line 2  
line 3
and so on....  

我需要Java程序来执行以下步骤:

  1. 检查每行语法是否正确
  2. 如果行正确,请使用此行生成一个byte []
  3. process byte [] array
  4. 我想在这里使用线程concpt。我希望子线程处理1和2进程并将byte[]返回给主线程。然后主程序将处理该字节数组。

    我可以使用线程,但返回值有问题。线程如何将每行返回byte[]到主线程?主线程如何以同步方式接收此byte[]数组?

1 个答案:

答案 0 :(得分:0)

从线程返回值的最简单方法是使用ExecutorServiceFuture类。您可以将任意数量的作业提交到线程池中。您还可以为每个作业添加更多线程或分叉线程。请参阅Executors中的其他方法。

例如:

// create a thread pool
ExecutorService threadPool = Executors.newFixedThreadPool(2);
// submit a job to the thread pool maybe with the script name to run
Future<byte[]> future1 = threadPool.submit(new MyCallable("scriptFile1.txt"));
// waits for the task to finish, get the result from the job, this may throw
byte[] result = future1.get();

public class MyCallable implements Callable<byte[]> {
    private String fileName;
    public MyCallable(String fileName) {
        this.fileName = fileName;
    }
    public byte[] call() {
        // run the script
        // process the results into the byte array
        return someByteArray;
    }
});