java多線程執行任務時,為了避免任務的重復執行,可以通過synchronized關鍵字處理共享成員變量,具體代碼如下:
// 多線程處理任務方法
private void processMultiTask(final List<LogStatTask> list, int threadCount) throws Exception {
// 根據設定的線程數處理任務列表
for (int i = 0; i < threadCount; i++) { TaskThread thread = new TaskThread(list); thread.start(); } }
// 任務處理線程類 class TaskThread extends Thread { private List<LogStatTask> taskList = null;
// 根據線程類成員變量創建構造函數 public TaskThread(List<LogStatTask> taskList) { super(); this.taskList = taskList; } public void run() { while (true) { LogStatTask task;
// 鎖住taskList任務表對象,確保只有一個線程正在操作它 synchronized (taskList) {
// 如果任務列表為空,則退出執行 if (CollectionUtils.isEmpty(taskList)) { break; }
// 從任務任務列表中取出一個待執行的任務,並從任務表中移除 task = taskList.remove(0); } // 釋放掉對taskList的鎖,以便其他線程對其操作,本線程則根據task進行相應的處理 } } }