简单多线程并发操作
来源:互联网 发布:软件开发费税率2016年 编辑:程序博客网 时间:2024/06/07 06:17
如何实现多线程并发执行一组数据?这里主要用到了先入先出的Queue。 namespace System.Collections.Specialized;
原理:把要执行的参数等放入Queue里面,在执行的时候从Queue取出并且移除,这样也就做到了数据不会重复操作。
下面以采集500W的时时彩数据为例....
private Queue<string> needSpideData; private delegate void SetRichText(string txt,bool b); private void SetText(string txt,bool b) { if (richTextBox1.InvokeRequired) { SetRichText srt = new SetRichText(SetText); this.Invoke(srt, new object[] { txt,b }); } else { if (b) richTextBox1.Text += txt + "\n"; else richTextBox2.Text += txt + "\n"; } } private void button1_Click(object sender, EventArgs e) { richTextBox1.Text = "开始采集.... \n"; richTextBox2.Text = ""; int day = (dateTimePicker2.Value - dateTimePicker1.Value).Days + 1; needSpideData = new Queue<string>(); for (int i = 0; i < day; i++) { needSpideData.Enqueue(string.Format("http://kaijiang.500wan.com/static/public/ssc/xml/qihaoxml/{0}.xml", dateTimePicker1.Value.AddDays(i).ToString("yyyyMMdd"))); } for (int i = 0; i < 10; i++) { Thread t = new Thread(new ThreadStart(Spide)); t.Start(); } } private void Spide() { try { if (needSpideData.Count > 0) { var url = needSpideData.Dequeue(); switch (ToGet.SaveSql(url))//操作数据库 { case 0: SetText(url + "\t采集失败,网络错误,或数据库已存在该数据", false); break; case 1: SetText(url + "\t采集失败,字段不匹配", false); break; case 2: SetText(url + "\t采集成功", true); break; } Spide(); } else { label4.Text = "采集完成"; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } /// <summary> /// 检查网络中是否存在文件 /// </summary> /// <param name="issue"></param> /// <returns></returns> private bool RemoteFileExists(string url) { try { string urls = url; HttpWebRequest re = (HttpWebRequest)WebRequest.Create(urls); HttpWebResponse res = (HttpWebResponse)re.GetResponse(); re.Timeout = 5000; if (res.ContentLength != 0) { //MessageBox.Show("文件存在"); return true; } } catch (Exception) { //MessageBox.Show("无此文件"); return false; } return false; }
- 简单多线程并发操作
- 多线程并发操作
- 多线程编程---同步并发操作
- CountDownLatch实现并发多线程操作
- 多线程操作简单实例
- activeMQ多线程并发 p2p 简单封装
- SQLite多线程下的并发操作
- .NET 多线程同步 / 并发操作数据唯一
- Android中使用CountDownLatch并发多线程操作
- c#多线程并发执行一个操作函数
- Android中使用CountDownLatch并发多线程操作
- 多线程并发锁和原子操作
- NET 多线程同步 / 并发操作数据唯一
- 多线程并发操作数据库以及数据库升级
- SQLite多线程下的并发操作
- 多线程实现数据库的并发操作
- Java多线程/并发17、简述CAS 操作
- 多线程并发
- Android 内容提供器---创建内容提供器(Intent对象和数据访问)
- Android学习笔记之百度地图(POI搜索之城市poi检索poiSearchInCity)
- js跑马灯
- 北京邮电大学2011年网院方向复试上机题 解题报告
- Java 布局管理器的种类
- 简单多线程并发操作
- js 分页
- js计算器
- 创建二维数组的方法(随时更新)
- 十进制and二进制
- 联合
- xxxdiff命令
- 关于C++重定义多次初始化问题
- Hibernate关联关系配置(一对多、一对一和多对多)