有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程如何在Java中实现多线程

我必须对一个方法进行多线程处理,该方法可以成批运行1000个代码。我需要将这些批给不同的线程

目前我有3个线程,但所有3个线程都在挑选第一批1000个。 我希望其他批次不应选择同一批次,而应选择其他批次

请提供帮助和建议


共 (4) 个答案

  1. # 1 楼答案

    检索批时使用lockmutex。这样,线程就不能同时访问关键部分,也不能意外地访问同一批

    我假设你正在移除一批被一根线拾取的产品

    编辑:艾奥贝和乔纳斯的答案更好,用这个。这是另一种选择。:)

  2. # 2 楼答案

    您需要同步对批处理中作业列表的访问。(“同步”本质上意味着“确保线程知道潜在的竞争条件”。在大多数情况下,这意味着“让某个方法一次由单个线程执行”。)

    这是使用java.util.concurrent包最容易解决的问题。看看^{}的各种实现,例如^{}^{}

  3. # 3 楼答案

    我会使用一个服务

    int numberOfTasks = ....
    int batchSize = 1000;
    ExecutorService es = Executors.newFixedThreadPool(3);
    for (int i = 0; i < numberOfTasks; i += batchSize) {
        final int start = i;
        final int last = Math.min(i + batchSize, numberOfTasks);
        es.submit(new Runnable() {
            @Override
            public void run() {
                for (int j = start; j < last; j++)
                    System.out.println(j); // do something with j
            }
        });
    }
    es.shutdown();
    
  4. # 4 楼答案

    将批放在^{}中,并使工作线程从队列中获取批