Java 如何在多线程类中使用实现Runnable的方法

Java 如何在多线程类中使用实现Runnable的方法,java,multithreading,arraylist,runnable,Java,Multithreading,Arraylist,Runnable,我正在制作一个多线程应用程序。实现Runnable的类有一个返回ArrayList的方法。我在我的主要课程中如何使用这种方法 class SearchThread implements Runnable { private ArrayList<String> found; //Constructor public SearchThread (String[] dataArray) {/**/} public void run() { tr

我正在制作一个多线程应用程序。实现Runnable的类有一个返回ArrayList的方法。我在我的主要课程中如何使用这种方法

class SearchThread implements Runnable {

   private ArrayList<String> found;

   //Constructor
   public SearchThread (String[] dataArray) {/**/}

   public void run() {
        try{
            //Do something with found
            }
            Thread.sleep(time);
            System.out.println("Hello from a thread!");
        }
        catch (Exception e){} 
   }
   public ArrayList<String> getResult() {
         return found;
   }
}
类SearchThread实现可运行{
发现了私人ArrayList;
//建造师
公共搜索线程(字符串[]数据数组){/**/}
公开募捐{
试一试{
//用你找到的东西做点什么
}
睡眠(时间);
System.out.println(“来自线程的你好!”);
}
捕获(例外e){}
}
公共ArrayList getResult(){
发现退货;
}
}
需要使用getResult方法的主类

ArrayList<String> result;
Thread[] threads = new Thread[data.length];

for (int i = 0; i < data.length; i++) {
    threads[i] = new Thread(new SearchThread(data[i]));
    threads[i].start();
}

try {
    for (int i = 0; i < data.length; i++) {
        threads[i].join();
        result = // need to use the getResult()
    }
} catch (Exception e) {
}
ArrayList结果;
线程[]线程=新线程[data.length];
对于(int i=0;i
您可以将对
搜索线程的引用存储在另一个数组中,并在相应线程加入后访问它们。我举一个例子:

ArrayList<String> result;
Thread[] threads = new Thread[data.length];
SearchThread[] searchThreads = new SearchThread[data.length];

for (int i = 0; i < data.length; i++) {
    searchThreads[i] = new SearchThread(data[i]);
    threads[i] = new Thread(searchThreads[i]);
    threads[i].start();
}

try {
    for (int i = 0; i < data.length; i++) {
        threads[i].join();
        result.add(i, searchThreads[i].getResult() ? "found"
                : "not found");
    }
} catch (InterruptedException e) {
    // do something meaningful with your exception
}
ArrayList结果;
线程[]线程=新线程[data.length];
SearchThread[]searchThreads=新的SearchThread[data.length];
对于(int i=0;i
您只需维护第二个数组,其中每个线程都可以运行
搜索线程