相关疑难解决方法(0)

何时使用挥发性改性剂?

可能重复:
您何时在Java中使用volatile关键字?

什么时候和为什么在java中需要volatile修饰符?

我有兴趣看到volatile变体原语或对象引用的真实世界用法.

java volatile

3
推荐指数
2
解决办法
1万
查看次数

如何使volatile count操作成为线程安全的

我一直在经历JCIP,作者在那里说..

线程限制的特殊情况适用于volatile变量.只要确保volatile变量仅从单个线程写入,对共享的volatile变量执行读 - 修改 - 写操作是安全的.

例如,count ++被认为是一个复合操作(读取值,向其中添加一个值,并更新值)并将count指定为volatile不会使此操作成为原子操作,因此这里不保证线程安全!我对吗 ??但是这里作者说我们可以修复它,如果我们确保volatile变量只是从一个线程写的.我没理解这一点.请提供说明.

java multithreading volatile

3
推荐指数
2
解决办法
475
查看次数

内存不一致与线程交错有何不同?

我正在编写一个多线程程序,正在研究是否应该使用volatile我的布尔标志.关于并发性的文档oracle跟踪并没有解释除以下内容memory consistency errors之外的任何内容:

当不同的线程具有应该是相同数据的不一致视图时,会发生内存一致性错误.

假设这些不一致的视图仅在"写入"操作之后发生是有意义的.但是多久之后呢?

例1

Thread A: Retrieve flag.
Thread B: Retrieve flag.
Thread A: Negate retrieved value; result is true.
Thread A: Store result in flag; flag is now true.
Thread B: System.out.print(flag) --> false
Run Code Online (Sandbox Code Playgroud)

由于Thread A并且Thread B同时运行,打印也可能导致true,具体取决于检索的时间flag.对于不一致而言,这是完全合理的.

但是memory consistency errors描述的方式(写入变量不一定反映在其他线程中)听起来这也是如此:

例2

Thread A: Retrieve flag.
Thread A: Change retrieved value; result is true.
Thread A: Store result in flag; flag is now true. …
Run Code Online (Sandbox Code Playgroud)

java memory multithreading volatile

3
推荐指数
1
解决办法
647
查看次数

线程安全保护

我了解publicprivate关键字的基本知识(我仍然不确定是什么protected

我有一个关于“保护数据成员以确保线程安全”的问题。

例如,假设我有一个类MyClass扩展Thread和属于这个类是私人称为数据成员MyDataMember。假设这个数据成员有公共访问器和设置器函数,确保同步数据成员。

现在,从“外部”的角度来看,这一切都很好,因为其他线程只能在正确同步时设置和检索数据成员。但是,怎么样等功能之内 MyClass?假设我 MyClass调用中还有另一个函数DoSomething。我知道我不应该尝试MyDataMember直接访问,但我可能会不时忘记调用访问器/设置器方法并直接访问/设置数据成员。

我的问题是:是否有一个关键字可以用来声明函数成员对某些数据成员的独占访问?这样,如果我“不小心”从没有独占访问权的方法中直接访问数据成员,则会发生错误。我只是认为这会使开发过程中的事情变得更安全(至少对我而言!)

java multithreading

0
推荐指数
1
解决办法
1670
查看次数

标签 统计

java ×4

multithreading ×3

volatile ×3

memory ×1