假如你的list是在类A中的。而你要出入到的线程为类B,
那么你就在类A那里,定义一个synchronized的方法,getNextElementForList(),里面返回list中的对象。
再 new Thread(new B(this)).start()即可。
补充下,上面的语句在类A中执行,而且类B是实现Runnable接口的。
给你一个类似的类来参考下吧:
import java.io.File;
import java.util.ArrayList;
public class ThreadDemo {
public static void main(String args[]){
int threadQuantity=3;
Handle h=new Handle();
h.initList();
h.handle(threadQuantity);
}
}
class Handle{
private String fileName="C://";
private int next=-1;
private int threadNo=0;
private ArrayList<File> list=new ArrayList<File>();
public Handle(String path){
fileName=path;
}
public Handle(){}
public void setPath(String path){
fileName=path;
}
public void initList(){
next=-1;
threadNo=0;
File f=new File(fileName);
list=new ArrayList<File>();
if(f.isDirectory()){
File[] fs=f.listFiles();
for(File e:fs){
list.add(e);
}
}else{
list.add(f);
}
}
public synchronized File getNextFile(){
next++;
if(next>=list.size()){
threadNo++;
System.out.println(threadNo+"个线程处理完毕");
return null;
}
return list.get(next);
}
public void handle(int threadQuantity){
for(int i=0;i<threadQuantity;i++){
new Thread(new ThreadHandle(this)).start();
}
}
}
class ThreadHandle implements Runnable{
private Handle handle;
public ThreadHandle(Handle handle){
this.handle=handle;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
File f=handle.getNextFile();
if(null==f) break;
whatYouDo(f);
}
}
private void whatYouDo(File f){
System.out.println("file name is "+f.getName()+" and it is"+(f.isDirectory()?" ":" not ")+"Directory");
}
}