zoukankan      html  css  js  c++  java
  • 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);
           }
    }
    









    实例







  • 相关阅读:
    20191117-STD::讲解及求平均数例题
    计算机网络-ip分类
    游标cursor
    ajax
    django ORM
    urls
    templates
    views
    models
    setting
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/13900801.html
Copyright © 2011-2022 走看看