使用全局变量,当多个线程同时修改静态属性第三季

Posted waitd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用全局变量,当多个线程同时修改静态属性第三季相关的知识,希望对你有一定的参考价值。

ThreadLocal介绍

  我们知道,变量从作用域范围进行分类,可以分为“全局变量”、“局部变量”两种:

  1.全局变量(global variable),比如类的静态属性(加static关键字),在类的整个生命周期都有效;

  2.局部变量(local variable),比如在一个方法中定义的变量,作用域只是在当前方法内,方法执行完毕后,变量就销毁(释放)了;

  使用全局变量,当多个线程同时修改静态属性,就容易出现并发问题,导致脏数据;而局部变量一般来说不会出现并发问题(在方法中开启多线程并发修改局部变量,仍可能引起并发问题);

  再看ThreadLocal,从名称上就能知道,它可以用来保存局部变量,只不过这个“局部”是指“线程”作用域,也就是说,该变量在该线程的整个生命周期中有效。

 

二.使用场景1——数据库事务问题

2.1问题背景

  下面介绍示例,UserService调用UserDao删除用户信息,涉及到两张表的操作,所以用到了数据库事务:

  数据库封装类DbUtils

以上是关于使用全局变量,当多个线程同时修改静态属性第三季的主要内容,如果未能解决你的问题,请参考以下文章

多线程2

多线程之线程安全

1.2 线程安全的理解

为啥lua语言中使用全局变量就会造成内存泄漏

线程安全

线程安全