代码改变世界

多线程Thread-Specific Storage 模式

2014-03-07 22:46 by youxin, 383 阅读, 0 推荐, 收藏,
摘要:http://www.riabook.cn/doc/designpattern/ThreadSpecificStorage.htmhttp://computerdragon.blog.51cto.com/6235984/1206623 阅读全文

多线程Two-Phase Termination Pattern两阶段终止模式

2014-03-07 22:26 by youxin, 1210 阅读, 0 推荐, 收藏,
摘要:一 Two-Phase Termination Pattern Two-Phase Termination Pattern,指的就是当希望结束一个线程的时候,送出一个终止请求,但是不会马上停止,做一些刷新工作。进入“终止处理中”,在该状态下,不会进行该线程日常工作任务的操作,而是进行一些终止操作。 这个方式所考虑的因素如下:1,必须要考虑到使得该线程能够安全的结束,Thread中的stop会有问题的,因为它会不管线程执行到哪里,都会马上停止,不能保证安全的结束。2,一定能够进行正常的终止处理,在java中,这点可以使用finally来实现3,能够高响应的终止,收到终止后,当线程在wait或者s 阅读全文

多线程 Worker Thread 模式

2014-03-07 22:13 by youxin, 3469 阅读, 0 推荐, 收藏,
摘要:Worker是“工人”的意思,worker thread pattern中,工人线程(worker thread)会一次抓一件工作来处理,当没有工作可做时,工人线程会停下来等待心得工作过来。Worker Thread也叫做background thread,另外,也有人把视点放在管理工人线程的地方,称之为Thread Pool。最近闲时在看《Java多线程设计模式》,很不错,语言浅显易懂,而且编排也好,很有启发性,现在挑其中一章来写写心得worker thread是我们平时用的很多的一种多线程模式,只不过我们常常不把它当模式罢了。基本内容是:有一个流水线(channel),流水线一端有客户线程 阅读全文

java Future 模式

2014-03-07 19:53 by youxin, 1612 阅读, 0 推荐, 收藏,
摘要:考慮這樣一個情況,使用者可能快速翻頁瀏覽文件中,而圖片檔案很大,如此在瀏覽到有圖片的頁數時,就會導致圖片的載入,因而造成使用者瀏覽文件時會有停頓 的現象,所以我們希望在文件開啟之後,仍有一個背景作業持續載入圖片,如此使用者在快速瀏覽頁面時,所造成的停頓可以獲得改善。Future模式在請求發生時,會先產生一個Future物件給發出請求的客戶,而同時間,真正的目標物件之生成,由一個 新的執行緒持續進行(即 Worker Thread),真正的目標物件生成之後,將之設定至Future之中,而當客戶端真正需要目標物件時, 目標物件也已經準備好,可以讓客戶提取使用。一個簡單的Java程式片段示範可能像是 阅读全文

多线程的优点和代价

2014-03-07 19:34 by youxin, 577 阅读, 0 推荐, 收藏,
摘要:尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:5秒读取文件A2秒处理文件A5秒读取文件B2秒处理文件B---------------------总共需要14秒从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据。在这段时间里,CPU非常的空闲。它可以做一些别的事情。通过改变操作的顺序,就能够更好的使用CPU资源。看下面的顺序:5秒读取文件A5秒读取文件B + 阅读全文

转:Java同步synchronized使用

2014-03-07 19:15 by youxin, 265 阅读, 0 推荐, 收藏,
摘要:原文链接作者:Jakob JenkovJava 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java同步关键字(synchronized)Java中的同步块用synchronized标记。同步块在Java中是同步在某个对象上。所有同步在一个对象上的同步块在同时只能被一个线程进入并执行操作。所有其他等待进入该同步块的线程将被阻塞,直到执行该同步块中的线程退出。有四种不同的同步块:实例方法静态方法实例方 阅读全文

管程

2014-03-07 18:49 by youxin, 2287 阅读, 0 推荐, 收藏,
摘要:管程是一种高级的同步原语。重要特性:任意时刻管程中只能有一个活跃进程。它是一种编程语言的组件,所以编译器知道它们很特殊,并可以采用与其他过程调用不同的方法来处理它们。典型地,当一个进程调用管程中的过程,前几条指令将检查在管程中是否有其他的活跃进程。如果有,调用进程将挂起,直到另一个进程离开管程。如果没有,则调用进程便进入管程。对管程的实现互斥由编译器负责!在Java中,只要将关键字synchronized加入到方法声明中,Java保证一旦某个线程执行该方法,就不允许其他线程执行该方法,就不允许其他线程执行该类中的任何其他方法。注意:管程是一个编程语言概念。编译器必须要识别出管程并用某种方式对互 阅读全文

【编程之美】双线程高效下载

2014-03-07 18:09 by youxin, 797 阅读, 0 推荐, 收藏,
摘要:假设提供了以下方法:bool GetBlockFromNet(Block *out_block);bool WriteBlockToDisk(Block *in_block);想实现高效当然是创建两个线程,A负责获取网络数据,B负责写入数据到硬盘,难点在于如何合理分配两个线程之间的工作!分析与解法:1.什么时候才算完成任务?下载完毕并且完全存储到硬盘上,两个线程才能正常终止。2.希望两个线程能同时工作,又不发生冲突,用什么方法?使用Mutex(互斥量),下载时不能存储所以弃用。使用Semaphore(信号量)是更好的选择。3.下载与存储的必要条件buffer满的时候和所有内容下载完毕,应该停止 阅读全文

转: 连续数打乱判断出少了哪些数?

2014-03-07 17:46 by youxin, 834 阅读, 1 推荐, 收藏,
摘要:. 问题:100个连续的数打乱之后,随机取出1个数,问如何最快速的判断出少了哪一个?分析:对于所有100个连续的数,只要除余100。一定在0~99之间。一般来说,比较常规的做法就是先排序(利用Hash表定位),在循环查找。当然时间复杂度是O(2n)。现在介绍一种很牛的O(n)做法:求二进制异或运算。异或运算: 0^0=1^1=0; 0^1=1^0=1。0~99个数全部异或的结果只能是0。如果缺少一个数,那么全部异或的结果正好就是那个数。为什么呢?我们做个小实验:假如有四个数: 0001 0010,0101, 0110 排列成一个matrix. bits: 1 2 3 4 0 0 0 1 0 0 阅读全文

多线程同步循环打印和Guarded suspension 模式

2014-03-07 16:53 by youxin, 636 阅读, 0 推荐, 收藏,
摘要:* 迅雷笔试题:* 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步。线程同步有两种基本方法:synchronized(2)wait,notify,notifyAll/** * 锁码:公共数据区... 阅读全文
上一页 1 ··· 88 89 90 91 92 93 94 95 96 ··· 269 下一页