黑马程序员技术交流社区
标题:
怎样去判断线程是否安全?
[打印本页]
作者:
せR3n、何必装纯
时间:
2011-11-22 14:41
标题:
怎样去判断线程是否安全?
那位神能帮我解释一下啊?
作者:
任俊杰
时间:
2011-11-22 14:48
判断一个变量在被修改时,是否可能有其它的线程对它访问或修改。如果有,那么它就不是线程安全的。
作者:
袁世宇
时间:
2011-11-22 15:02
看线程是不是有锁,或者单线程就是安全的
作者:
冯敏
时间:
2011-11-22 15:49
线程安全就是指 所有的方法都是用synchronized修饰,使用此关键字修饰的方法同一时间只能被一个线程访问 其他线程必须等待,判断线程是否安全,看该方法在同一时间是不是只能被一个线程访问。
作者:
崔浩
时间:
2011-11-22 16:49
先判断,一个线程对数据是否进行了修改,而其他的线程是否进行了读取或者修改,如果多个线程都是对一个数据进行了读取,那么就不存在线程的安全问题,如果多个线程,有一个线程对线程的共有数据进行了修改,那么就要进行线程的同步,
作者:
王丰盛568
时间:
2011-11-22 17:26
线程安全性
类要成为线程安全的,首先必须在单线程环境中有正确的行为。如果一个类实现正确(这是说它符合规格说明的另一种方式),那么没有一种对这个类的对象的操作序列(读或者写公共字段以及调用公共方法)可以让对象处于无效状态,观察到对象处于无效状态、或者违反类的任何不可变量、前置条件或者后置条件的情况。
此外,一个类要成为线程安全的,在被多个线程访问时,不管运行时环境执行这些线程有什么样的时序安排或者交错,它必须仍然有如上所述的正确行为,并且在调用的代码中没有任何额外的同步。其效果就是,在所有线程看来,对于线程安全对象的操作是以固定的、全局一致的顺序发生的。
正确性与线程安全性之间的关系非常类似于在描述 ACID(原子性、一致性、独立性和持久性)事务时使用的一致性与独立性之间的关系:从特定线程的角度看,由不同线程所执行的对象操作是先后(虽然顺序不定)而不是并行执行的。
作者:
程立彬
时间:
2011-11-23 08:49
如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
作者:
程佳佳
时间:
2011-11-24 10:49
线程的工作原理,jvm有一个main memory,而每个线程有自己的working memory,一个线程对一个variable进行操作时,都要在自己的working memory里面建立一个copy,操作完之后再写入main memory。多个线程同时操作同一个variable,就可能会出现不可预知的结果。根据上面的解释,很容易想出相应的scenario。
而用synchronized的关键是建立一个monitor,这个monitor可以是要修改的variable也可以其他你认为合适的object比如method,然后通过给这个monitor加锁来实现线程安全,每个线程在获得这个锁之后,要执行完 load到workingmemory -> use&assign -> store到mainmemory 的过程,才会释放它得到的锁。这样就实现了所谓的线程安全。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2