多线程补习笔记1

2020-08-28  本文已影响0人  凡尘85

人到中年,职业危机,不得已开始补习java基础知识。
原本雄心壮志觉得多线程这部分一周就差不多了,结果写了个例子就想不明白了,今天贴出来大家给指点指点吧。
随后我会把多线程的相关知识从浅入深的写写,如有错误,请多多包涵。

public class ThreadStudy {
    public static class ShareBean {
        private int abc;
        public int getAbc() {
            return abc;
        }
        public void addOne() {
            String threadName = Thread.currentThread().getName();
            System.out.println("当前线程《" + threadName +"》加一开始:" +abc);
            abc =abc +1;
            System.out.println("当前线程《" + threadName +"》加一结束:" +abc);
        }
    }

    public static void main(String[] args)throws InterruptedException {
        ShareBean shareBean =new ShareBean();
        Runnable runnable1 =new Runnable() {
            @Override
            public void run() {
                shareBean.addOne();
            }
        };
        Runnable runnable2 =new Runnable() {
            @Override
            public void run() {
                shareBean.addOne();
            }
        };
        for(int i=0;i<10;i++) {
            Thread t1 =new Thread(runnable1);
            t1.setName("a" + i);
            t1.start();
            Thread t2 =new Thread(runnable2);
            t2.setName("b" + i);
            t2.start();
        }
        Thread.sleep(3000);
        System.out.println("多线程情况结果:" + shareBean.getAbc());
    }
}

下面是一次运行的结果:

当前线程《a0》加一开始:0
当前线程《a0》加一结束:1
当前线程《b1》加一开始:0
当前线程《b1》加一结束:2
当前线程《a2》加一开始:0
当前线程《b0》加一开始:0
当前线程《a1》加一开始:0
当前线程《a1》加一结束:5
当前线程《b0》加一结束:4
当前线程《a2》加一结束:3
当前线程《b2》加一开始:2
当前线程《a3》加一开始:1
当前线程《a3》加一结束:7
当前线程《b2》加一结束:6
当前线程《a5》加一开始:5
当前线程《a5》加一结束:8
当前线程《a4》加一开始:7
当前线程《a4》加一结束:9
当前线程《b4》加一开始:9
当前线程《b4》加一结束:10
当前线程《a8》加一开始:10
当前线程《a8》加一结束:11
当前线程《b3》加一开始:11
当前线程《b3》加一结束:12
当前线程《a9》加一开始:11
当前线程《b9》加一开始:12
当前线程《b9》加一结束:14
当前线程《a6》加一开始:12
当前线程《a7》加一开始:14
当前线程《a7》加一结束:16
当前线程《b8》加一开始:13
当前线程《b8》加一结束:17
当前线程《a9》加一结束:13
当前线程《b5》加一开始:17
当前线程《b6》加一开始:16
当前线程《b6》加一结束:19
当前线程《b7》加一开始:16
当前线程《a6》加一结束:15
当前线程《b7》加一结束:20
当前线程《b5》加一结束:18
多线程情况结果:20


我这里有两个问题:

  1. 按以上运行结果理解,b5线程最后运行结束,按说abc的最终结果应该是20。
  2. b7加一开始时值为16,结束时值为20,中间值不存在,怎么造成的。

我是灰灰

上一篇下一篇

猜你喜欢

热点阅读