Che*_*eng 2 java multithreading
最近,我遇到了一种volatile旗帜技术,我可以避免使用synchronized或lock.
http://jeremymanson.blogspot.com/2008/11/what-volatile-means-in-java.html
这是使用volatileflag 的代码示例之一.
正确的工作实例
Thread 1
========
// re-odering will not happen. initialize_var...
// will not move below "volatile_initialization_ready = true"
// statement.
initialize_var1();
initialize_var2();
initialize_var3();
volatile_initialization_ready = true;
Thread 2
========
if (volatile_initialization_ready) {
use_var1();
use_var2();
use_var3();
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现我在某些情况下不能使用这种技术,如下所示.
错误的工作示例
Thread 1
========
volatile_going_to_destroy = true;
destroy_var1();
destroy_var2();
destroy_var3();
Thread 2
========
if (volatile_going_to_destroy) {
return; // ignore.
}
// But Thread 1 still able to perform destroy
// when Thread 2 halt right here. Also, re-ordering might
// happen, where destroy_var1 might move above
// "volatile_going_to_destroy = true" statement.
use_var1();
use_var2();
use_var3();
Run Code Online (Sandbox Code Playgroud)
我想知道,我是否有可能使错误的工作示例工作,但只是使用volatile,而不使用synchronized或lock?
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |