public void()
{
Thread[] threads = new Thread[4]; for (int i = 0; i < threadCount; i++)
{
Thread t = new Thread(new ThreadStart(Add));
threads[i] = t;
}
for (int i = 0; i < threadCount; i++)
{
threads[i].Start();
} SomeMethod();
}
public void Add()
{
//
}Add是个需要执行时间比较长的函数我想等生成的这四个线程全执行完Add再去执行SomeMethod可这写的话threads[i].Start();之后,就利马执行SomeMethod了怎么解决?让生成的所有线程全执行完,再执行接下来的语句
{
Thread[] threads = new Thread[4]; for (int i = 0; i < threadCount; i++)
{
Thread t = new Thread(new ThreadStart(Add));
threads[i] = t;
}
for (int i = 0; i < threadCount; i++)
{
threads[i].Start();
} SomeMethod();
}
public void Add()
{
//
}Add是个需要执行时间比较长的函数我想等生成的这四个线程全执行完Add再去执行SomeMethod可这写的话threads[i].Start();之后,就利马执行SomeMethod了怎么解决?让生成的所有线程全执行完,再执行接下来的语句
阻塞调用线程,直到某个线程终止时为止
{
threads[i].Start();
}
for (int i = 0; i < threadCount; i++)
{
threads[i].Join();
}??
{
lock(this)
{
Thread[] threads = new Thread[4]; for (int i = 0; i < threadCount; i++)
{
Thread t = new Thread(new ThreadStart(Add));
threads[i] = t;
}
for (int i = 0; i < threadCount; i++)
{
threads[i].Start();
}
} SomeMethod();
}
public void Add()
{
//
}
Thread.CurrentThread.Suspend();//挂起
Thread.CurrentThread.Resume.//唤醒
ASP.NET中
两个人访问就是两个HTTP请求,就会生成两个当前ASPX页面的类的对象对吧
这个类里有个地方是被lock住了
一个对象进入这个段代码,另外一个HTTP请求还能进入么?我的理解是LOCK是对同一个对象中的多线程起作用的
两个对象,LOCK就不管用了,对么?也就是说另外一个HTTP请求是可以进入的,对么?
{
threads[i].Start();
}
for (int i = 0; i < threadCount; i++)
{
threads[i].Join();
}??
我用这种方法测试成功了LOCK的没试有人说赞成LOCK 那能告诉我为什么JOIN的方式不好么?
1、创建每个子线程的时候,要提供回调函数,并给他们分配一个唯一ID号;
2、每个子线程完成后,用自己的唯一ID号来调用回调函数;
3、在回调函数中,判断当前的ID号是否收齐,如果收齐,触发相应的事件。
{
//不断监测所有子线程状态
if(finished.count==total.count)
break;
}
用一个类实现thread。start(),在最后通知住程序完成自身任务
{
parent.addtofinishedqueue(value);
}
class Program
{
static void Main(string[] args)
{
ManualResetEvent[] manualEvents = new ManualResetEvent[4];
for (int i = 0; i < 4; i++)
{
manualEvents[i] = new ManualResetEvent(false);
System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(Add), manualEvents[i]);
}
WaitHandle.WaitAll(manualEvents);
Console.Write("All Thread Over");
Console.ReadLine();
}
public static void Add(object stateinfo)
{
try
{
Console.WriteLine("I am over");
}
catch
{
}
finally
{
ManualResetEvent manualEvent = (ManualResetEvent)stateinfo;
manualEvent.Set(); }
}
}
结果:
I am over
I am over
I am over
I am over
All Thread Over
线程同步的问题用zhongkeruanjian(编程亮子) ( ) 信誉:75 的线程池方法解决了LOCK谁能解释一下
=======
就手问一下LOCK的问题
ASP.NET中
两个人访问就是两个HTTP请求,就会生成两个当前ASPX页面的类的对象对吧
这个类里有个地方是被lock住了
一个对象进入这个段代码,另外一个HTTP请求还能进入么?我的理解是LOCK是对同一个对象中的多线程起作用的
两个对象,LOCK就不管用了,对么?也就是说另外一个HTTP请求是可以进入的,对么?
完事了就揭帖 谢谢大家