黑马程序员技术交流社区

标题: 多线程不安全的原因在哪里 [打印本页]

作者: 迦南    时间: 2014-8-16 23:45
标题: 多线程不安全的原因在哪里
java中多线程怎么造成不安全的,如何解决这个不安全问题?
作者: 舍我其谁    时间: 2014-8-17 00:24
多个线程执行共同的代码就会出现线程不安全,要解决这些问题,就要使多线程执行的代码同步
作者: Huberry    时间: 2014-8-17 01:12
多个线程对一个共享数据进行操作,而且操作代码不止一行,就可能发生某一进程在对数据操作到一半的时候停了,这时候另一个进程又对这个没有处理完的数据进行操作,从而导致安全问题
作者: 嘿~~    时间: 2014-8-17 08:29
多个线程并发访问某一执行体时,因为CPU的 高速切换造成的
作者: 思维    时间: 2014-8-17 09:11
多线程共享代码容易出现不安全,需要使用同步锁,同步锁又容易产生死锁,所以很让人纠结!
作者: 菜鸟一号    时间: 2014-8-17 09:37
共用资源不安全,容易相互抢夺资源
作者: 碎流    时间: 2014-8-17 09:58
cpu的切换容易造成线程执行的不安全,通过确保一个线程彻底执行完再切换其他线程来解决,
作者: yuZhe_toString    时间: 2014-8-17 20:17
由于资源共享,若不加控制就是造成数据出错。
作者: rolling-stone    时间: 2014-8-17 21:09
自己去看毕向东那个视频,里面有个买火车票的例子,如果线程不加锁,那机会出现一节车厢有100个作为,结果卖出去多于100张票的情况.
作者: hsy    时间: 2014-8-17 22:03
多线程不安全的判断条件:1.是否存在共享数据源?2.是否对共享数据有多个操作?3.是否在多线程中(单线程不考虑)解决方法:对不安全的部分加锁,利用synchronize语句,后跟任意对象,但必须是同一个
作者: ximi    时间: 2014-8-17 22:42
主要是数据值的操作问题,容易造成脏数据,无法保证数据的一致性,所以一般使用同步块或线程安全的对象
作者: 毕业生    时间: 2014-8-18 00:25
楼主来水贴吧 ,  这个东西 毕老师不是讲的很清楚吗?
作者: 恣意的豆腐    时间: 2014-8-18 07:51
认真看一下视频吧
作者: 不再上网    时间: 2014-8-18 07:56
原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分还没执行完,另一个线程就参与进来执行,导致了共享数据错误。解决办法:对多条操作共享数据的语句,只能让1个线程都执行完。在执行过程中,其他线程不可以参与执行。使用同步,sychronized.
作者: 嘿~~    时间: 2014-8-18 08:00
多个线程并发访问共享资源时,CPU高速切换造成一个线程访问共享资源后尚未保存就被另一个线程抢走访问权,这就是不安全的原因,用同步锁来解决啊synchronized或者Lock
作者: 迦南    时间: 2014-8-21 20:48
舍我其谁 发表于 2014-8-17 00:24
多个线程执行共同的代码就会出现线程不安全,要解决这些问题,就要使多线程执行的代码同步 ...

嗯,谢谢回答
作者: 迦南    时间: 2014-8-21 20:49
Huberry 发表于 2014-8-17 01:12
多个线程对一个共享数据进行操作,而且操作代码不止一行,就可能发生某一进程在对数据操作到一半的时候停了 ...

嗯,谢谢回答
作者: 迦南    时间: 2014-8-21 20:50
嘿~~ 发表于 2014-8-17 08:29
多个线程并发访问某一执行体时,因为CPU的 高速切换造成的

这么神奇
作者: 迦南    时间: 2014-8-21 20:51
思维 发表于 2014-8-17 09:11
多线程共享代码容易出现不安全,需要使用同步锁,同步锁又容易产生死锁,所以很让人纠结! ...

哦,这样呀
作者: 迦南    时间: 2014-8-21 20:52
菜鸟一号 发表于 2014-8-17 09:37
共用资源不安全,容易相互抢夺资源

嗯,谢谢
作者: 迦南    时间: 2014-8-21 20:55
碎流 发表于 2014-8-17 09:58
cpu的切换容易造成线程执行的不安全,通过确保一个线程彻底执行完再切换其他线程来解决, ...

嗯,谢谢
作者: 迦南    时间: 2014-8-21 21:00
yuZhe_toString 发表于 2014-8-17 20:17
由于资源共享,若不加控制就是造成数据出错。

嗯,谢谢
作者: KID灬熊孩子    时间: 2014-8-21 21:00
今天又学了Jdk1.5新特性   用lock代替synchronized 的wait和  notify  
作者: 迦南    时间: 2014-8-21 23:00
rolling-stone 发表于 2014-8-17 21:09
自己去看毕向东那个视频,里面有个买火车票的例子,如果线程不加锁,那机会出现一节车厢有100个作为,结果 ...

嗯,多谢
作者: 迦南    时间: 2014-8-21 23:02
rolling-stone 发表于 2014-8-17 21:09
自己去看毕向东那个视频,里面有个买火车票的例子,如果线程不加锁,那机会出现一节车厢有100个作为,结果 ...

嗯,谢谢
作者: 何艳梅    时间: 2014-8-21 23:52
共享数据。
作者: 范靖明    时间: 2014-8-22 10:06
多线程的执行代码会造成线程不安全,需要用同步解决,用同步函数还是同步代码块要看执行代码是全部还是局部,避免死锁!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2