java并发编程 - 9 - ThreadlLocal 避免共享

我们说,没有共享,就没有并发问题。所以避免共享也是避免并发问题的方式。java提供了ThreadLocal类。
ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。

private Integer val=0;


    @Test
    public  void test1() throws InterruptedException {
        //共享变量,互相影响
        Thread t1=new Thread(()->{
            for(Integer i=0;i<10;i++){
                val++;
                log.info(val.toString());

            }
        });

        Thread t2=new Thread(()->{
            for(Integer i=0;i<10;i++){
                val++;
                log.info(val.toString());
            }
        });

        t1.start();
        t2.start();
        t1.join();
        t2.join();
    }



    private ThreadLocal<Integer> value=ThreadLocal.withInitial(()->{
        return 0;
    });

    @Test
    public  void test() throws InterruptedException {
        //threadlocal 互不影响
        Thread t1=new Thread(()->{
            for(Integer i=0;i<10;i++){
                value.set(value.get()+1);
                log.info(value.get().toString());

            }
        });

        Thread t2=new Thread(()->{
            for(Integer i=0;i<10;i++){
                value.set(value.get()+1);
                log.info(value.get().toString());
            }
        });

        t1.start();
        t2.start();
        t1.join();
        t2.join();
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容