public void Task implements Runnable { public static int postion = 0; public static int queryNum = 1000; private int start; private int end; public static void run() {
for (int i=start, i <end; i++) {
System.out.println("处理中"); 每次查询之后都把 postion 指针 加上 queryNum 个
这个修改postion指针 一定要线程同步
}
}
}
for (int i=start, i <end; i++) {
System.out.println("处理中"); 每次查询之后都把 postion 指针 加上 queryNum 个
这个修改postion指针 一定要线程同步
}
}
}
你需要记录的就是最后一个取数据的线程取到多少条数据了,所以要有一个static字段来标示
比如
static int pos;而为了数据同步的安全(虽然我认为在你的这个程序里几乎不会发生这种冲突,几率太低),但是建议你在取pos的时候用这么一个方法static int getCurrentPos()
{
synchronized(pos)
{
pos += 1000;
return pos;
}
}
1.实现一个构造线程串的方法,这个方法返回最先要调用的线程(FillData 是线程类):private FillData buildThread() {
List<FillData> list = new ArrayList<FillData>();
//构造你要的3个线程
for(int i=0;i<3;i++){
list.add(new FillData());
}
//实现线程串连
for (int i=0;i<list.size()-1;i++){
list.get(i).setAfter(list.get(i+1));
}
return list.get(0);
}2.线程类特殊的地方:class FillData extends Thread {
private FillData after;
public void setAfter(FillData after) {
this.after = after;
}
public void run() {
//...处理数据
if (null != after) {
try {
sleep(1000);
} catch (InterruptedException e) {
log.error("filldata sleep error",e);
}
after.start();
return;
}
}
}
3.调用的地方 buildThread().start();即可