final int READY = 0; public static final int RUNNING = 1; public static final int FINISHED = 2; private int status; private int taskId; public Task(int taskId){ this.status = READY; this.taskId = taskId; } public void execute() { setStatus(Task.RUNNING); System.out.println("当前线程 ID 是:" + Thread.currentThread().getName() +" | 任务 ID 是:"+this.taskId); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } setStatus(FINISHED); } public void setStatus(int status) { this.status = status; } public int getTaskId() { return taskId; } } class WorkThread extends Thread { private List taskList = null; private int threadId; public WorkThread(List taskList,int threadId) { this.taskList = taskList; this.threadId = threadId; } public void run() { for (Task task : taskList) { task.execute(); } } }
执行结果如下,注意观察每个Java多线程分配到的任务数量及区间。直到所有的线程完成了所分配到的任务后程序结束: - 线程 0 的任务数:22 区间[0,21]
- 线程 1 的任务数:22 区间[22,43]
- 线程 2 的任务数:22 区间[44,65]
- 线程 3 的任务数:21 区间[66,86]
- 线程 4 的任务数:21 区间[87,107]
- 实际要启动的工作线程数:5
- 当前线程 ID 是:Thread-0 | 任务 ID 是:0
- 当前线程 ID 是:Thread-1 | 任务 ID 是:22
|