您可以将所需的任何数据传递给该Thread.Start()
方法。这基本上是线程之间共享内容的首选方式。但是,在基本层面上,如果多个线程将访问其他线程也将访问的内容,则需要建立某种锁定机制以确保不会出现争用问题。
假设您有一个全局级别的类实例,在您的线程之间共享:
(这是 C# 但你明白了)
class GlobalData {
public string SomeProperty {get; set; }
public int SomeOtherProperty {get; set; }
}
多个线程同时访问这些属性中的任何一个(或期望值在调用之间保持一致)的情况会很麻烦。所以最简单的方法是创建一个线程负责的锁定机制:
class GlobalData {
public object Sentry = new object();
public string SomeProperty {get; set; }
public int SomeOtherProperty {get; set; }
}
在运行线程的代码中,你会做这样的事情(假设g_Data
是类的实例):
void SomeMethodRunningOnAThread() {
lock (g_Data.Sentry) {
// do stuff
}
}
(在 VB.NET 中相当于lock
是SyncLock
)
这是确保您不会陷入争用问题的最简单方法。每个线程负责确保它们在访问对象内容之前尝试锁定对象。
除此之外,当然还有一些方法可以解决这个问题,例如在包含全局数据的类中实现锁定逻辑。它并没有变得不那么复杂,所以如果你想最终实现更复杂的东西,你无论如何都必须阅读。