共享资源一般是以对象的形式存在的内存片段,但也可能是文件,输入\输出端口,或者打印机。要控制对共享资源的访问,的先把它包装进一个对象。然后把所有要访问这个资源的方法标记为synchronized。如果某个人物处于一个对标记为synchronized的方法的调用中,那么在这个线程从该方法返回前,其他所有要调用类中任何标记为synchronized方法的线程都会被阻塞。
//中间这段为个人简单总结:
一个共享对象中所有标记为synchronzied的方法共享一个锁。一个线程可以多次获取对象的锁,比如:一个对象在同一个对象上的其他标记为synchronzied方法,后者又调用了同一个对象上的另一个方法。
注意:在使用并发时,将域设置为private是非常重要的,否则,synchronzied关键字就不能防止其他线程直接访问域,这样就会产生冲突。(现在终于有所体会,之前一直不明白为何要这么做。)
//总结结束
什么时候应该用同步呢? 可以使用Brian的同步规则:
如果你正在写一个变量,它可能接下来将会被另一个线程读取,或者正在读取一个上一次已经被另一个线程写过的变量,那么你必须使用同步,并且,读写线程都必须用相同的监视器同步。
上原文(照片喳喳的):
认识能够反应实践,同时也能够指导实践,正确的认识能够积极的推动实践的发展。
时间: 2024-10-10 09:22:42