新手问下关于线程的一个问题 线程处理完自己的事情,就会释放,所有你可以将要处理的数据,比如前100条交给一个线程,另外100条交给另一个线程,处理完就ok了,还可以考虑线程池 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的意思是,当一批数据被处理完之后,线程会自动释放,下一批数据来的时候,还是需要新的线程被创建来处理这批数据? 我有点明白你的意思了,你的意思是把所有的数据均衡分配给线程来执行,比如总共5000条,然后均衡分配。但是实际情况是,实际数据有几万到几千万不等,处理非常耗时。同时还需要记录断点(比如当处理到某一批数据时,程序异常崩溃了,或者数据库连接断开了那么我需要记录这批数据的断点)下次启动时,只需回滚这一批数据,然后再接着执行下去)这点我也很无奈.... 线程池不会用啊~~~新手第一次接触多线程操作 给你一个参考 public static class X { private static System.Collections.Generic.Queue<object> queue; private static int queueLock; private static void run() { do { while (System.Threading.Interlocked.CompareExchange(ref queueLock, 1, 0) != 0) System.Threading.Thread.Sleep(0); object value = queue.Count != 0 ? queue.Dequeue() : null; queueLock = 0; if (value == null) break; try { //数据你的处理 } catch { } } while (true); } private static void start() { queue = new System.Collections.Generic.Queue<object>(); queue.Enqueue(new object());//添加你的数据 for (int threadCount = 10; threadCount != 0; --threadCount) new Thread(run).Start(); } } 如何判断cmd命令执行完 C#两个字符串对比,排除不相同的 面试问题 logoPictureBox和textBoxDescription控件问题 关于2.0里面的解压缩 为什么Main方法不应为Public? 哪位大侠帮忙用.net解决XPath和命名空间的问题啊,应该是简单的,但是困扰了一天了。在线等。。。 如何在C#中执行存储过程! 什么意思,能不能帮我解释一下:) 在线求助:打包以后的exe文件如何在没有装.net的windows2000professional环境下运行? 如何给bindingsource.addnew的新行的一列赋值 TeeChart控件
你的意思是,当一批数据被处理完之后,线程会自动释放,下一批数据来的时候,还是需要新的线程被创建来处理这批数据?
我有点明白你的意思了,你的意思是把所有的数据均衡分配给线程来执行,比如总共5000条,然后均衡分配。
但是实际情况是,实际数据有几万到几千万不等,处理非常耗时。同时还需要记录断点(比如当处理到某一批数据时,程序异常崩溃了,或者数据库连接断开了那么我需要记录这批数据的断点)下次启动时,只需回滚这一批数据,然后再接着执行下去)这点我也很无奈....
线程池不会用啊~~~新手第一次接触多线程操作
{
private static System.Collections.Generic.Queue<object> queue;
private static int queueLock;
private static void run()
{
do
{
while (System.Threading.Interlocked.CompareExchange(ref queueLock, 1, 0) != 0) System.Threading.Thread.Sleep(0);
object value = queue.Count != 0 ? queue.Dequeue() : null;
queueLock = 0;
if (value == null) break;
try
{
//数据你的处理
}
catch { }
}
while (true);
}
private static void start()
{
queue = new System.Collections.Generic.Queue<object>();
queue.Enqueue(new object());//添加你的数据
for (int threadCount = 10; threadCount != 0; --threadCount) new Thread(run).Start();
}
}