用多线程去处理 123,456,789 三个字符串,然后以147,258,369输出

48次阅读

共计 1225 个字符,预计需要花费 4 分钟才能阅读完成。

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
* 用多线程去处理 “123”,”456″,”789″ 三个字符串,然后以 ”147″,”258″,”369″ 输出
*
*/
public class ThreadSample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
String str1 = “123”,str2 = “456”,str3 = “789”;
ProcessThread thread3 = new ProcessThread(str3, null);
ProcessThread thread2 = new ProcessThread(str2, thread3);
ProcessThread thread1 = new ProcessThread(str1, thread2);
for (int i = 0; i < str1.length(); i++) {
thread1.setIndex(i);
FutureTask<String> future = new FutureTask<String>(thread1);
new Thread(future).start();
String outStr = future.get();
System.out.println(outStr);
}
}
}

输出:147258369

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class ProcessThread implements Callable<String>{
private String value;
private ProcessThread next;
private Integer index;

public String call() throws Exception {
if(this.next!=null){
this.next.setIndex(this.index);
// 开启下一个线程
FutureTask<String> future = new FutureTask<String>(this.next);
new Thread(future).start();
String nextString = future.get();
return value.charAt(this.index)+nextString;
}
return String.valueOf(value.charAt(this.index));
}
public ProcessThread(String value, ProcessThread next) {
this.value = value;
this.next = next;
}
//set/get 省略
}

正文完
 0