Rea*_*ed. 5 java multithreading
假设我有一个方法,可以通过两个或多个线程访问,我想让它保证线程安全.
public int getVal(int x, int y, MyClass myObj)
{
int z;
z = getInt(myObj);
return x + y + z;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我认为我们不必同步x + y,因为它们是原始的.
让我们假设getInt(myObj)
修改myObj的状态并影响z的值.
因此,我将不得不为该行提供同步,z = getInt(myObj);
但仅当两个线程都在'myObj'引用中传递相同的实例时.作为API的编码器,我不知道两个线程是否都会为'myObj'传递相同的实例.在某些情况下,这些线程可能会在"myObj"引用中传递相同的MyClass实例,而在其他情况下,它们可能会在"myObj"引用中传递不同的MyClass实例.
那么,如何确保线路的线程安全z = getInt(myObj)
?(当然,我们不希望在传递的实例不同时进行同步,并且只有在传递的实例相同时才需要同步.我很清楚这是无法确定的).
假设MyClass不能成为不可变的,我认为以下可能是一个解决方案.
synchronized(myObj)
{
z = getInt(myObj);
}
Run Code Online (Sandbox Code Playgroud)
这是正确的解决方案吗?并且,我们可以通过其他方式确保线程安全
z = getInt(myObj); (but only in case of different instances)?
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2631 次 |
最近记录: |