黑马程序员技术交流社区

标题: 线程中的安全问题及解决方法 [打印本页]

作者: 水蛭31    时间: 2015-6-17 15:07
标题: 线程中的安全问题及解决方法
线程中的安全问题
安全问题的由来:
当一个程序中有多个线程同时运行的时候, 并且是共享同一数据资源,
那么多个线程会争取抢夺CPU的执行权,当其中的一个线程使用了这个共享数据,但是只是执行了一部分, 还有一部分的
代码没有执行完, 另一个线程就争抢到了CPU的执行权, 同样执行那这一部分,从而导致共享数据的错误。
解决方案:
对多个线程共享数据的语句只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行,即使其他线程有了CPU的执行
权了无法进来执行, 这就需要一个门来限制,叫做同步代码块;
synchronized(对象)
{
需要被同步的代码     //哪些代码需要同步, 就要看那些代码在操作共享数据,

}
当然门上需要有锁来标识的和控制的,这里的“对象”,就相当于这把门上的锁, 也叫监视器。
这个锁是如何操作的呢?
当然在第一个线程进来的时候, 这个锁当然是开着的, 当这个线程进来之后, 就会把这个门关上,程序中就是同步代码块。
通过同步代码块中的对象来标识,
对象如同锁, 持有锁的线程可以在同步中执行,没有持有锁的线程即使获取了cpu的执行权了,也进不去, 因为没有获取锁,
因此同步就可以解决问题了。










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