从对象集合创建Threadpool或Executor服务

时间:2016-03-04 19:22:47

标签: java multithreading

我正在尝试从对象集合中创建一个threadPool。集合中有1000个对象。每个对象调用一个函数来获取字符串列表并将它们存储在输出字符串列表中。

但问题是我必须生成大约1000个线程来同时获取列表,或者我必须按顺序遍历列表并获取String列表列表。

所以我想在这里做,而不是每个线程只有一个对象。我每个线程有一个X对象的集合(每个线程10个对象)。然后遍历移动每个物体的物体。

有没有办法而不是循环遍历对象来直接创建线程池或执行器服务?

或者还有其他方法解决这个问题吗?

                           ----   main thread   -----
     (thread1)            |     (thread2)|   (thread3)|
                       group1         group2       group3
     (Subthreads)       |   |          |   |         |  |
                      obj1 obj2      obj3 obj    obj5 obj6

public class ExampleApplication {

static List<String> outputList = new ArrayList<String>();

static ExecutorService executor = Executors.newScheduledThreadPool(10);

public static void main(String[] args) throws InterruptedException {

    List<Customer> list = new ArrayList<Customer>();

    //Example list of Object Collection
    for (int i = 0; i < 100; i++) {
        list.add(new Customer());
    }

    executor.execute(new Query(list.subList(0, 25)));
    executor.execute(new Query(list.subList(26, 50)));
    executor.execute(new Query(list.subList(51, 75)));
    executor.execute(new Query(list.subList(76, 100)));

    executor.shutdown();
}

static class Query implements Runnable {

    List<Customer> list;

    public Query(List<Customer> list) {
        // TODO Auto-generated constructor stub
        this.list = list;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (Customer customer : list) {
            //Adds a list of String to this output list
            //customer.rec() returns a list of String
            outputList.addAll(customer.rec());
        }
    }
}
}

以上是一个示例问题。这里我创建了一个10的线程池,在Query类中,我有点迭代对象列表来获取String列表。因此,没有任何方法可以使每个线程的X对象集合(每个线程10个对象),而不是迭代对象的集合。有没有我可以参考的例子?

0 个答案:

没有答案