JAVA基础-多线程同步

需要处理一万条上数据,每条数据都需要执行一个耗时任务,开启10个线程进行处理

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Main {

    private static final int NUM_THREADS = 10;
    private static final int NUM_TASKS = 10000;

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

        // 创建一个线程池
        ExecutorService executor = Executors.newFixedThreadPool(NUM_THREADS);

        // 提交任务
        for (int i = 0; i < NUM_TASKS; i++) {
            final int taskId = i;
            executor.submit(new Runnable() {
                @Override
                public void run() {
                    // 调用耗时任务的接口
                    // TODO: 处理数据的逻辑
                    System.out.println("任务" + taskId + "完成");
                }
            });
        }

        // 关闭线程池
        executor.shutdown();

        // 等待所有任务完成
        executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

        // 所有任务完成后打印完成
        System.out.println("所有任务已完成");
    }
}

 

如果需要每个耗时任务都需要间隔5秒执行,代码如下:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Main {

    private static final int NUM_THREADS = 10;
    private static final int NUM_TASKS = 10000;

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

        // 创建一个线程池
        ExecutorService executor = Executors.newFixedThreadPool(NUM_THREADS);

        // 提交任务
        for (int i = 0; i < NUM_TASKS; i++) {
            final int taskId = i;
            executor.submit(new Runnable() {
                @Override
                public void run() {
                    // 调用耗时任务的接口
                    // TODO: 处理数据的逻辑
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("任务" + taskId + "完成");
                }
            });
        }

        // 关闭线程池
        executor.shutdown();

        // 等待所有任务完成
        executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

        // 所有任务完成后打印完成
        System.out.println("所有任务已完成");
    }
}

 

posted on 2023-05-08 16:59  麦芽呀~  阅读(35)  评论(0编辑  收藏  举报