是否存在使方法线程安全的整体规则/指南?我知道可能有一百万次一次性情况,但一般情况如何呢?这很简单吗?
是吗?这也适用于静态方法吗?
@Cybis提供的一个答案是:
局部变量不能在线程之间共享,因为每个线程都有自己的堆栈.
静态方法也是如此吗?
如果方法传递给引用对象,那是否会破坏线程的安全性?我做了一些研究,并且有很多关于某些情况的研究,但我希望能够通过使用一些规则来定义遵循的指导方针,以确保方法是线程安全的.
所以,我想我的最终问题是:"是否有一个简短的规则列表定义了一个线程安全的方法?如果是这样,它们是什么?"
编辑这里
有很多好处.我认为这个问题的真正答案是:"没有简单的规则来确保线程安全." 凉.精细.但总的来说,我认为接受的答案提供了一个很好的简短摘要.总有例外.就这样吧.我可以忍受这一点.
我想创建一个存储DataTables的类,这将阻止我的应用程序每次要检索它时导入详细信息列表.因此,这应该做一次,我相信下面的代码这样做,但我不确定它是否是线程安全的.
下面的代码位于我的三层应用程序的Business Layer部分,它将DataTable返回到表示层.
public class BusinessLayerHandler
{
public static DataTable unitTable;
public static DataTable currencyTable;
public static DataTable GetUnitList()
{
//import lists each time the application is run
unitTable = null;
if (unitTable == null)
{
return unitTable = DatabaseHandler.GetUnitList();
}
else
{
return unitTable;
}
}
public static DataTable GetCurrencyList()
{
//import lists each time the application is run
currencyTable = null;
if (currencyTable == null)
{
return currencyTable = DatabaseHandler.GetCurrencyList();
}
else
{
return currencyTable;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏,如果有更好的方法来缓存DataTable,请告诉我. …
好吧,它比问题复杂一点.
class A
{
static int needsToBeThreadSafe = 0;
public static void M1()
{
needsToBeThreadSafe = RandomNumber();
}
public static void M2()
{
print(needsToBeThreadSafe);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我要求在M1()和M2()之间调用'needsToBeThreadSafe'保持线程安全.