package com.fock;
public class Person {
/**
* 用户编号
*/
private String id;
/**
* 用户名称
*/
private String name;
public Person(String id) {
super();
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]"+"\r\n";
}
}
package com.fock;
import java.util.List;
import java.util.concurrent.RecursiveAction;
/**
* 任务分解对象
* @author djk
*
*/
public class PersonTask extends RecursiveAction{
/**
* 序列号
*/
private static final long serialVersionUID = 1L;
/**
* 任务开始位置
*/
private int first;
/**
* 任务结束位置
*/
private int last;
/**
* 任务处理对象
*/
private List<Person> persons;
public PersonTask(int first, int last, List<Person> persons) {
super();
this.first = first;
this.last = last;
this.persons = persons;
}
@Override
protected void compute() {
if (last - first < 10) {
System.out.println("============begin================");
for (int i = first; i < last; i++) {
Person person = persons.get(i);
person.setName("djk");
System.out.println(person);
}
System.out.println("============end================");
} else {
int middle = (last + first) / 2;
PersonTask left = new PersonTask(first, middle, persons);
PersonTask right = new PersonTask(middle, last, persons);
invokeAll(left, right);
}
}
}
package com.fock;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;
public class FockJoinTest {
public static void main(String[] args) {
List<Person> list = getEmptyPerson();
// 设置用户的名称
ForkJoinPool fjpool = new ForkJoinPool();
fjpool.execute(new PersonTask(0, list.size(), list));
fjpool.shutdown();
// 最多等待5秒
try {
fjpool.awaitTermination(5, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(list);
}
/**
* 获得空的对象
*
* @return
*/
private static List<Person> getEmptyPerson() {
List<Person> list = new ArrayList<Person>();
for (int i = 0; i < 25; i++) {
list.add(new Person(i+""));
}
return list;
}
}