(原创)多线程设计模式 序言
2006-04-17 15:15
232 查看
线程不是目的,而是方法和手段。
在程序中我们为什么要使用到多线程,如何使用多线程,根据我学习的体会应该考虑到下面几个问题:
1、运算时间
这是选择多线程的必要条件。如果一段代码非常耗时,在他工作的时间内程序失去响应,这是无法忍受的。一般情况下会把这段代码放到一个独立的线程里面,这样在他运算的过程中,程序还可以继续处理其他事情。当然,如果是不一般的情况,比如说你的程序就完成这么一个运算任务,然后就结束了,运算过程中程序也不需要作其他工作,就没必要开起一个线程了。
2、数据访问特点
数据访问特点是考虑选择什么样的多线程模式必须参考的条件。比如说数据是只读的还是读写的,如果是只读的,一般情况下就不需要考虑互斥性,可以多个线程同时访问数据。如果是读写的,一个线程在读取的同时,另一个线程在改写数据,这样很可能得不到正确的数据,所以一般情况下,都要对可读写数据进行互斥保护。
关于数据访问特点另一个需要考虑的因素是,工作线程对所访问的数据是否有条件限制。比如说,一个线程在不停的改变数据,一会变为正数,一会变为负数;而另一个线程的工作是获取数据的平方根,因此,这个线程在工作之前就必须测试数据访问条件,如果是正数当然可以工作,如果是负数就必须等待。等待什么呢?当然是等待第一个线程的通知,“现在数据发生变化了,请重新尝试一下吧!”,这个工作是第一个线程改变数据状态后完成的。
3、线程数量和数据吞吐性
一般情况下,同时工作的线程越多,数据吞吐性越好,但是在考虑到互斥保护的时候,又不能让太多的线程同时工作,在保证数据线程安全的情况下,尽量增大数据吞吐性,所以这也是在选择多线程模式时需要考虑的两个因素。
再遇到需要使用多线程的情况,只要确定了这几个特点,基本上就能知道选择什么样的多线程模式了。
在程序中我们为什么要使用到多线程,如何使用多线程,根据我学习的体会应该考虑到下面几个问题:
1、运算时间
这是选择多线程的必要条件。如果一段代码非常耗时,在他工作的时间内程序失去响应,这是无法忍受的。一般情况下会把这段代码放到一个独立的线程里面,这样在他运算的过程中,程序还可以继续处理其他事情。当然,如果是不一般的情况,比如说你的程序就完成这么一个运算任务,然后就结束了,运算过程中程序也不需要作其他工作,就没必要开起一个线程了。
2、数据访问特点
数据访问特点是考虑选择什么样的多线程模式必须参考的条件。比如说数据是只读的还是读写的,如果是只读的,一般情况下就不需要考虑互斥性,可以多个线程同时访问数据。如果是读写的,一个线程在读取的同时,另一个线程在改写数据,这样很可能得不到正确的数据,所以一般情况下,都要对可读写数据进行互斥保护。
关于数据访问特点另一个需要考虑的因素是,工作线程对所访问的数据是否有条件限制。比如说,一个线程在不停的改变数据,一会变为正数,一会变为负数;而另一个线程的工作是获取数据的平方根,因此,这个线程在工作之前就必须测试数据访问条件,如果是正数当然可以工作,如果是负数就必须等待。等待什么呢?当然是等待第一个线程的通知,“现在数据发生变化了,请重新尝试一下吧!”,这个工作是第一个线程改变数据状态后完成的。
3、线程数量和数据吞吐性
一般情况下,同时工作的线程越多,数据吞吐性越好,但是在考虑到互斥保护的时候,又不能让太多的线程同时工作,在保证数据线程安全的情况下,尽量增大数据吞吐性,所以这也是在选择多线程模式时需要考虑的两个因素。
再遇到需要使用多线程的情况,只要确定了这几个特点,基本上就能知道选择什么样的多线程模式了。
相关文章推荐
- (原创)多线程设计模式 之 不变模式
- Java多线程Thread-并发协作(生产者消费者设计模式)
- (原创)无废话C#设计模式之十四:Template Method
- [设计模式总结] 5. 单例模式(以及多线程、无序写入、volatile对单例的影
- 多线程(单例设计模式)
- 多线程设计模式-Future模式
- 多线程设计模式
- 【多线程高并发】多线程的设计模式
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- Android多线程设计模式---wait()和notify()机制
- 通过例子学设计模式之--单例模式以及多线程下说明(C++实现)
- Android设计模式的学习——序言
- 【原创】《Linux高级程序设计》杨宗德著 - Linux多线程编程 - 线程概念及创建线程 分类: Linux --- 应用程序设计 2014-11-19 17:31 82人阅读 评论(0) 收藏
- 多线程编程的设计模式 临界区模式(一)
- Java基础进阶_day16_(多线程,互斥锁,线程池,定时器,设计模式)
- 设计模式之Visitor——送礼篇(原创)
- 设计模式之Adapter——电话篇(原创)
- 设计模式(三)- Singleton模式续(多线程模式下的Singleton模式)
- 设计模式之Mediator——联通篇(原创)
- 设计模式之Strategy——简历篇(原创)