java多线程执行任务,处理共享成员变量的安全问题

本文介绍了一种使用Java多线程处理任务列表的方法,通过synchronized关键字避免任务重复执行,确保线程安全。该方法将任务列表分配给多个线程,每个线程依次处理并移除任务列表中的任务。

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进行相应的处理 } } }

 

转载于:https://www.cnblogs.com/dali-lyc/p/7457715.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值