询问一个关于在并发场景下的线程内包含另一个线程的问题

smh821025 发布于 2016/05/23 11:42
阅读 132
收藏 0

在这里请教各位高手一个问题:

我需要在一个循环里面去调用线程执行run方法,然后在run方法里面去调用一个方法A,方法A里面还会有一个循环的线程调用,请问这样的话会不会有影响,下面便于大家理解,我简单的用代码来表示。

ExecutorService executorService = Executors.newFixedThreadPool(20);

//1代码块
for(int i = 0; i < 2; i++) {
      executorService.execute(new A()); //A类实现了Runnable接口
}

public class A implements Runnable {

    public void run() {

        aa();

    }

}

//2代码块
public void aa() {

    for (int i = 0; i < 2; i++) {
          executorService.execute(new B());  B类实现了Runnable接口
    }

}

public class B implements Runnable {

    public void run() {

        //做相应的业务处理

    }

}



在这里,1代码块执行的时候,我把for循环的两次调用分别称为A1和A2,那么就会出现两个线程A1和A2,那么我想问下大家,当A1和A2分别去执行2代码块的时候,会不会有线程之间的数据影响,我之前考虑的是加入lock机制,就是在类外面加入类常量。

private static final Lock lock = new ReentrantLock();
然后在方法中加入

lock.lock;
//业务执行代码块
lock.unlock;



请问这样可行么,如果可行的话,请问应该加在哪里,如果不可行的话,请给个建议应该怎样实现这样的功能?我想实现的最终目的是想让1代码块的两个循环单独执行自己的代码已完成各自的业务,线程之间不受各自影响,谢谢高手指点。

加载中
返回顶部
顶部