积极答复者
有关多线程调用的实例的一个问题

问题
-
有如下程序:
class testClass
{
public void polling()
{
myThread[] = new Thread[5];
for (int i=0;i<5;i++)
{
myThread[i]=new Thread(new ParameterizedThreadStart(testFunction1(obj)));
myThread[i].start(obj);
}
}private void testFunction1(object obj)
{
...........................
}
}
class testClass2
{
testClass cls = new testClass;
cls.polling();
}
请问当在执行 cls.polling();这句代码的时候,多线程是如何 调用执行的。
说法1: 多线程myThread[0]....myThread[4]在执行的时候是 调用的一个实例的testFunction1方法执行的。
说法2: 多线程myThread[0]....myThread[4]在执行的时候是 调用的5个不同实例的testFunction1方法执行的。
说法3: 多线程myThread[0]....myThread[4]在执行的时候由于在执行的时候由于调用的是自己类内部的方法,不存在调用类实例的问题。
还是以上说法都不对,而是......- 已移动 Sheng Jiang 蒋晟Moderator 2010年4月22日 4:36 (发件人:一般性问题讨论区)
答案
-
你好!
描述的都不是很准确,勉强来说的话,说法1比较接近,准确的说法是这四个线程都是在同一个实例cls上调用的方法testFunction1,如果方法testFunction1种对某些字段做了修改,也是修改cls这个实例的中的某些字段!
希望这个解释对你有帮助!
周雪峰- 已标记为答案 scoket.joe 2010年3月10日 2:12
全部回复
-
你好!
描述的都不是很准确,勉强来说的话,说法1比较接近,准确的说法是这四个线程都是在同一个实例cls上调用的方法testFunction1,如果方法testFunction1种对某些字段做了修改,也是修改cls这个实例的中的某些字段!
希望这个解释对你有帮助!
周雪峰- 已标记为答案 scoket.joe 2010年3月10日 2:12
-
你好!
是这个意思:
class testClass
{
private string name=""; //这里定义一个字段
public void polling()
{
myThread[] = new Thread[5];
for (int i=0;i<5;i++)
{
myThread[i]=new Thread(new ParameterizedThreadStart(testFunction1(obj)));
myThread[i].start(obj);
}
} private void testFunction1(object obj)
{
name="abc"; //这里修改了字段abc的值,修改的是cls这个实例的name字段
}
数据库的更新,你最好在程序中考虑冲突的问题,可以考虑加锁等同步机制!
周雪峰