• 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);
           }
    }
    









    实例







  • 相关阅读:
    求助
    debian虚拟机试用
    算是业界新闻吧
    推荐一个图书分享网站
    日志
    写汇编报告小记
    水仙花数
    进程创建
    win32程序运行原理1
    [解题报告]374 Big Mod
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/13900801.html
Copyright © 2020-2023  润新知