线程安全问题
程序员文章站
2022-05-05 23:13:26
...
1.文件冲突
* 1.采用悲观锁和乐观锁机制解决文件冲突;
* 2.例如:
a.VSS 微软提供的版本控制工具,采用就是悲观锁方式.
表示一个线程在访问文件时,另一个线程不允许访问.所以,解决线程安全问题.
但是开发过程中,多人维护同一个文件时,工作效率低.所以,一般情况下,一个文件只分配给一个人维护.
b. CVS/SVN 开源的,采用乐观锁的方式维护文件的安全.
在管理文件时,给文件增加版本号,每一次修改版本号都会自动加1.后提交修改操作的线程不允许提交.必须先更新,然后修改,然后再提交.
2.数据冲突
1.JVM数据是如何存储的?
内存结构:
例如:虚拟机执行 User u1 = new User(“z3”)这行代码
1.先将类加载到方法区
2.栈中生成引用,堆中产生对象,对象的属性为z3
又执行代码:User u2 = u1; //2个引用执行同一个对象
这时就会产生线程不安全的问题
解决办法:
1.线程同步,对同一资源进行线程的控制访问,即:多线程并发对同一个对象进行访问,可以采用线程同步机制. (加锁)
2.多例创建对象,让一个线程访问一个对象,如: