在Java中,可以使用线程池(ExecutorService)和Callable接口来实现多线程任务分配。以下是一个简单的示例:
- 首先,创建一个实现Callable接口的类,用于定义任务:
import java.util.concurrent.Callable; public class Task implements Callable{ private int taskId; public Task(int taskId) { this.taskId = taskId; } @Override public String call() throws Exception { // 在这里执行任务 System.out.println("Task " + taskId + " is running by " + Thread.currentThread().getName()); return "Task " + taskId + " completed"; } }
- 然后,在主程序中创建一个线程池,将任务提交给线程池执行:
import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; public class Main { public static void main(String[] args) { // 创建一个固定大小的线程池 ExecutorService executorService = Executors.newFixedThreadPool(3); // 创建任务列表 List> futures = new ArrayList<>(); // 提交任务 for (int i = 0; i < 5; i++) { Task task = new Task(i); Future future = executorService.submit(task); futures.add(future); } // 获取任务结果 for (Future future : futures) { try { System.out.println(future.get()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } // 关闭线程池 executorService.shutdown(); } }
在这个示例中,我们创建了一个固定大小为3的线程池,并提交了5个任务。线程池会自动分配任务给空闲的线程,并在任务完成后返回结果。最后,我们关闭线程池以释放资源。