Ste*_*nte 9 java multithreading
如果多个线程正在更新同一个变量,我该怎么做才能让每个线程正确更新变量?
任何帮助将不胜感激
有几种选择:
1)根本不使用同步
这只能在数据是基本类型(不是长/双)的情况下工作,并且您不关心读取陈旧值(这不太可能)
2)将该字段声明为volatile
这将保证永远不会读取陈旧的值.它也适用于对象(假设对象在创建后没有更改),因为事先发生了对volatile变量的保证(参见"Java Memory Model").
3)使用java.util.concurrent.AtomicLong,AtomicInteger等
它们都是线程安全的,并支持特殊操作,如原子增量和原子比较和设置操作.
4)使用相同的锁保护读写
此方法提供了互斥,允许定义大型原子操作,其中多个数据成员作为单个操作进行操作.
这是多线程应用程序的一个主要问题,并且在答案中涵盖的内容超出了我的实际范围,所以我会指出一些资源.
http://download.oracle.com/javase/tutorial/essential/concurrency/sync.html
http://www.vogella.de/articles/JavaConcurrency/article.html#concurrencyjava_synchronized
实质上,您使用synchronized关键字来锁定变量.这可以确保一段代码一次只运行一次.您还可以在多个区域中的同一对象周围放置锁.
此外,您需要注意几个陷阱,例如死锁.
http://tutorials.jenkov.com/java-concurrency/deadlock.html
错误使用锁导致的错误通常很难调试和追踪,因为它们不是很一致.因此,您始终需要小心将所有锁放在正确的位置.
| 归档时间: |
|
| 查看次数: |
5016 次 |
| 最近记录: |