package Thread;
import org.apache.commons.lang3.ArrayUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author xiaobu
* @version JDK1.8.0_171
* @date on 2018/10/19 9:13
* @descrption 多个线程操作数组
*/
public class Test_4 {
public synchronized void handleList(List<String> data, int threadNum) {
int length = data.size();
//如果线程个数不能被整除则多加个线程来处理剩余的数据
int t=length%threadNum==0?length/threadNum:length/(threadNum-1);
for(int i=0;i<threadNum;i++){
int start=i*t;
int end=(i+1)*t;
HandleThread handleThread = new HandleThread("线程["+i+"]",data,start,end>length?length:end);
new Thread(handleThread).start();
}
}
public class HandleThread implements Runnable{
private String name;
private List<String> data;
private int start;
private int end;
public HandleThread(String name, List<String> data, int start, int end) {
this.name=name;
this.data=data;
this.start = start;
this.end = end;
}
@Override
public void run() {
data.subList(start,end).add("^&*");
System.out.println("线程:"+name);
}
}
public static void main(String[] args) {
long time1 = System.currentTimeMillis();
List<String> data=new ArrayList<>();
for (int i = 0; i <50000 ; i++) {
data.add("item"+i);
}
Test_4 test_4 = new Test_4();
test_4.handleList(data,5);
System.out.println(ArrayUtils.toString(data));
System.out.println("耗时:"+(System.currentTimeMillis()-time1)/1000+" s");
}
}
多个线程操作数组
猜你喜欢
转载自blog.csdn.net/tanhongwei1994/article/details/83411951
今日推荐
周排行