cn1*_*n1h 7 java concurrency multithreading synchronized race-condition
为了避免竞争条件,我们可以在共享变量上同步write和access方法,将这些变量锁定到其他线程.
我的问题是,是否有其他(更好的)方法来避免竞争条件?锁定会使程序变慢.
我发现的是:
我不确定它们的执行速度是否比同步方式更快,还有其他更好的方法吗?
谢谢
避免状态.尽可能使您的应用程序成为无状态.每个线程(操作序列)应该在开头采用上下文并使用此上下文将其从方法传递给方法作为参数.
当这种技术无法解决您的所有问题时,请使用事件驱动机制.当您的代码必须与其他组件共享某些内容时,它会将事件(消息)抛出到某种总线(主题,队列,等等).组件可以注册侦听器以侦听事件并做出适当的反应.在这种情况下,没有竞争条件(除了将事件插入队列).如果您正在使用即用型队列而不是自己编码,那么它应该足够有效.
另外看看Actors模型.
由于其非阻塞行为,原子确实比经典锁更高效,即等待访问内存位置的线程不会进行上下文切换,这节省了大量时间。
当需要同步时,最好的指导方针可能是看看如何尽可能地减小关键部分的大小。一般想法包括:
| 归档时间: |
|
| 查看次数: |
13157 次 |
| 最近记录: |