Robin's Blog

记录 积累 学习 成长

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

文章分类 -  多线程同步&异步应用程序

1

摘要:在开发中多线程并发问题,数据安全,很重要,如果用了多线程就不的不考虑数据安全,如何让主线程等待所有子线程都执行完,在继续执行?方法很多,1.在主方法中做现场数标记,如果有子线程没执行完就循环检测。2.Thread.join()方法等待线程结束。第一种方法:view plaincopy to clipboardprint?packagecom.yangtb.Thread;importjava.uti... 阅读全文
posted @ 2010-04-14 16:59 Robin99 阅读(2994) 评论(0) 推荐(0) 编辑

摘要:一. 为什么要lock,lock了什么? 当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待。但当不同的线程都需要访问某个资源的时候,就需 要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源在同一时刻只能被一个线程操作,以确保每个操作都是有效即时的,也即保证其操作的原 子性。lock是C#中最常用的同步方式,格式为lock(objectA){c... 阅读全文
posted @ 2009-08-24 09:32 Robin99 阅读(240) 评论(0) 推荐(0) 编辑

摘要:http://knowledge.swanky.wu.googlepages.com/threading_in_c_sharp_part_4.html 阅读全文
posted @ 2009-08-10 22:08 Robin99 阅读(217) 评论(0) 推荐(0) 编辑

摘要:Application Lock 锁定技术 今天同事告诉我, 锁 hashtable 应该锁它的 SyncRoot 属性而不应该锁它的实例, 例如: Hashtable ht = new Hashtable(); lock(ht.SyncRoot) { ... } 看了 .Net Framework 文档, 给的例子也是锁 SyncRoot 属性, 说如果锁实例的话不能保证... 阅读全文
posted @ 2009-08-07 14:56 Robin99 阅读(778) 评论(0) 推荐(0) 编辑

摘要:归纳一下:C#线程同步的几种方法编写高效的线程安全类 阅读全文
posted @ 2009-08-07 14:05 Robin99 阅读(183) 评论(0) 推荐(0) 编辑

摘要:转自:http://www.cnblogs.com/cuihongyu3503319/archive/2008/11/18/1336178.html本来我理解的静态变量的生命周期是 void Application_Start开始 void Application_End结束的,本来这就是对的 今天要做一个全局的应用,想确认一下,在网上一找,我的天,说什么的都有 大概分三种 1.Applica... 阅读全文
posted @ 2009-08-07 11:49 Robin99 阅读(382) 评论(0) 推荐(0) 编辑

摘要:【原创】关于C#多线程安全问题的讨论是大多线程序都是不可以避免地要在跨线程中访问对象,分两种对象来讨论:不可变对象 和可变对象 不可变对象 不可变对象就是在创建之后对象的状态是不可改变的,该种对象的状态就是它创建时的状态,所以其在多线程环境下也是安全。 可变对象 可变对象在跨线程的环境下,要设计为线程安全的类安全的对它的状态进行操作。 阅读全文
posted @ 2009-08-07 11:47 Robin99 阅读(235) 评论(0) 推荐(0) 编辑

摘要:写在前面:在.Net中,Static会经常和线程的东西扯在一起。写的代码是不是线程安全呢?好多程序员都在想,不过,有时候随便就放过了。真正 出问题的时候再想。其实,如果程序员一开始就明白这里面的机制,也许,编写的代码质量会更加的高。也少些线程安全的烦问题。事实上,了解线程安全的机制 后,你会发现,这原来是很简单的事情,只是很多人不愿意去了解线程。因为对于普通的程序员,线程的东西真是不好玩的,也不太... 阅读全文
posted @ 2009-08-07 10:22 Robin99 阅读(686) 评论(1) 推荐(0) 编辑

摘要:一、什么是线程冲突 线程冲突其实就是指,两个或以上的线程同时对同一个共享资源进行操作而造成的问题。 一个比较经典的例子是,用一个全局变量做计数器,然后开N个线程去完成某个任务,每个线程完成一次任务就将计数器加一,直到完成100次任务。如果不考虑线程冲突问题,用类似下面的代码去做,则很可能会超额完成任务,线程越多,完成任务次数超出100次的可能性就越大。 伪代码如下: int count = ... 阅读全文
posted @ 2009-08-06 17:56 Robin99 阅读(242) 评论(0) 推荐(0) 编辑

摘要:我做的一个Windows Form 程序碰到一个很怪异的多线程情况,最后检查进去竟然是部分代码的数据库链接没有关闭导致的。 我的这个程序是多线程程序,每个线程不间断的从数据库中取得数据,然后对取出的数据进行处理,一直循环到没有需要处理的数据为至。每个线程的循环是上万次的,即,每个线程上万次的数据库链接打开操作。 这个程序碰到怪异的现象是: 在A服务器上,没有任何问题,在B服务器上程序开一个线... 阅读全文
posted @ 2009-08-06 09:30 Robin99 阅读(742) 评论(0) 推荐(0) 编辑

摘要:今天是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。 Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates 有两个主要问题:1.什么是the calling thread? 2.什么是a thread? 首先来看一下有关的概念: 我们执行... 阅读全文
posted @ 2009-08-02 18:10 Robin99 阅读(148) 评论(0) 推荐(0) 编辑

摘要:下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可。(线程入口使程序知道该让这个线程干什么事) 在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。 打开你的VS.ne... 阅读全文
posted @ 2009-08-02 17:25 Robin99 阅读(171) 评论(0) 推荐(0) 编辑

摘要:Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以... 阅读全文
posted @ 2009-08-02 17:06 Robin99 阅读(154) 评论(0) 推荐(0) 编辑

摘要:Download demo - 14.7 KBDownload source code - 34.3 KB Table of Contents Below are the topics grouped by relationship to each other: IntroductionWhat you will get from this article?Identify deadlock... 阅读全文
posted @ 2009-07-30 17:33 Robin99 阅读(237) 评论(0) 推荐(0) 编辑

摘要:是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载Web页面以便脱机使用,开发者利用蜘蛛程序扫描自己的Web检查无效的链接……对于不同的用户,蜘蛛程序有不同的用途。那么,蜘蛛程序到底是怎样工作的呢? 蜘蛛是一种半自动的程序,就象现实当中的蜘蛛在它的Web(蜘蛛网)上旅行一样... 阅读全文
posted @ 2009-07-29 09:21 Robin99 阅读(474) 评论(4) 推荐(0) 编辑

摘要:在《爬虫/蜘蛛程序的制作(C#语言)》一文中,已经介绍了爬虫程序实现的基本方法,可以说,已经实现了爬虫的功能。只是它存在一个效率问题,下载速度可能很慢。这是两方面的原因造成的: 1. 分析和下载不能同步进行。在《爬虫/蜘蛛程序的制作(C#语言)》中已经介绍了爬虫程序的两个步骤:分析和下载。在单线程的程序中,两者是无法同时进行的。也就是说,分析时会造成网络空闲,分析的时间越长,下载的效率越低。反之... 阅读全文
posted @ 2009-07-29 09:19 Robin99 阅读(1083) 评论(0) 推荐(0) 编辑

摘要:在VS2005中添加了BackgroundWorker组件,该组件在多线程编程方面使用起来非常方便,然而在开始时由于没有搞清楚它的使用机制,走了不少的弯路,现在把我在使用它的过程中的经验与诸位分享一下。 BackgroundWorker类中主要用到的有这列属性、方法和事件: 重要属性: 1、CancellationPending获取一个值,... 阅读全文
posted @ 2009-04-11 22:21 Robin99 阅读(180) 评论(0) 推荐(0) 编辑

摘要:我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态;或者你的程序需要访问一些外部资源如数据库或网络文件等。这些情况你都可以创建一个子线程去处理,然而,多线程不可避免地会带来一个问题,就是线程同步的问题。如果这个问题处理不好,我们就会得到一些非预期的结果。 在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就简单的... 阅读全文
posted @ 2009-02-26 17:11 Robin99 阅读(3294) 评论(0) 推荐(0) 编辑

摘要:在等待异步操作结果的同时可以进行其他工作的应用程序不应在操作完成之前阻止等待。可以使用下列方法之一来在等待异步操作完成的同时继续执行指令。 可使用 AsyncCallback 委托来处理另一个线程中的异步操作的结果。本主题中演示了此方法。 可使用异步操作的 BeginOperationName 方法返回的 IAsyncResult 的 IsCompleted 属性来确定此操作... 阅读全文
posted @ 2009-02-26 16:11 Robin99 阅读(463) 评论(0) 推荐(0) 编辑

摘要:在B/S开发中我们可能很少需要用到多线程,一方面,在同一个会话中需要同时执行的操作并不多,另一方面, 因为浏览器为我们做了一些工作。服务器进行长时间运算的时候浏览器会等待,并有一些友好的提示。而不是挂起在那。(如果你觉得这些提示还不能令人满意,一些客户端技术如AJAX能达到一些不错的效果。) 然而当我们需要做一些windows程序或是服务时情况就不同了,最简单的情况,我们执行一个耗时操作,这个时... 阅读全文
posted @ 2009-02-26 16:08 Robin99 阅读(413) 评论(0) 推荐(0) 编辑

1