4.4 变量的线程安全分析

4.4 变量的线程安全分析



成员变量例子

class ThreadUnsafe {
      ArrayList<String> list = new ArrayList<>();
      public void method1(int loopNumber) {
            for (int i = 0; i < loopNumber; i++) {
                  // { 临界区, 会产生竞态条件
                        method2();
                        method3();
                  // } 临界区
             }
      }
      private void method2() {
            list.add("1");
       }
      private void method3() {
            list.remove(0);
       }
}
static final int THREAD_NUMBER = 2;
static final int LOOP_NUMBER = 200;
public static void main(String[] args) {
ThreadUnsafe test = new ThreadUnsafe();
for (int i = 0; i < THREAD_NUMBER; i++) {
      new Thread(() -> {
                  test.method1(LOOP_NUMBER);
                   }, "Thread" + i).start();
             }
}


将list变量改为局部变量

class ThreadSafe {
      public final void method1(int loopNumber) {
            ArrayList<String> list = new ArrayList<>();
            for (int i = 0; i < loopNumber; i++) {
                  method2(list);
                  method3(list);
             }
       }
        private void method2(ArrayList<String> list) {
            list.add("1");
        }
        private void method3(ArrayList<String> list) {
            list.remove(0);
       }
}









实例







posted @ 2020-10-30 10:22  xidianzxm  阅读(154)  评论(0编辑  收藏  举报