- 浏览: 570215 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
JYY282:
[i][/i]
Ecshop与Shopex的比较 -
qq247890212:
我也遇见这问题了,真诡异。重新下载个猫换了就好了。 太浪费时间 ...
诡异:ClassNotFoundException: org.springframework.web.filter.CharacterEncoding
From:http://www.2cto.com/kf/201101/81893.html
作者 孙东风 2011-1-12 转载请注明出处
引言
在涉及多线程并发操作时,如何管理多线程对共享数据的访问以及防止线程间的死锁问题是个很重要的话题。在Java语言中,从Java 5开始,Java提供了自己的线程池ThreadPoolExecutor类;在iPhone中则提供了NSOperationQueue类进行多线程的管理和调度。
什么是线程池?
线程池到底是怎么一回事呢?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的典型的执行流程如下:
首先,启动若干数量的线程,并让这些线程处于睡眠状态
其次,当客户端有新的请求时,线程池会唤醒某一个睡眠线程,让它来处理客户端的请求
最后,当请求处理完毕,线程又处于睡眠状态
Java线程池
线程池可以由程序员自己来实现,但是从Java 5开始,Java语言自带了线程池的类ThreadPoolExecutor,这个类提供了典型的线程池管理的接口,来研究ThreadPoolExecutor类的实现无疑更有借鉴意义。
ThreadPoolExcutor类常用的构造方式为
ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,RejectedExecutionHandler handler)
参数corePoolSize为线程池维护线程的最少数量
参数maximumPoolSize为线程池维护线程的最大数量
参数keepAliveTime为线程池维护线程所允许的空闲时间
参数unit为线程池维护线程所允许的空闲时间的单位
参数workQueue为线程池所使用的缓冲队列
参数handler为线程池对拒绝任务的处理句柄
一个任务可以通过excute(Runnable)方法被添加到线程池,任务就是一个实现了Runnable接口的对象,而线程池通过Runnable类型对象的run()方法来执行任务。
典型的用法如下:
首先,构造一个线程池
ThreadPoolExecutor threadPool =
new ThreadPoolExecutor(2,4,3,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),new ThreadPoolExecutor.DiscardOldestPolicy());
for(int i = 1;i <= 5;i++)
{
try
{
String task = “task@”+i;
System.out.println(“put”+task);
threadPool.execute(new ThreadPoolTask());
}
}
catch(Exception e)
{
e.printStackTrace();
}
而线程池所要执行的任务对象需要实现Runnable接口,线程池执行任务对象时调用任务对象的run()方法,它的实现代码如下:
public class ThreadPoolTask implements Runnable{
ThreadPoolTask(){}
public void run(){
System.out.println(“start execute”);
}
}
iPhone操作队列
iPhone本身也支持多线程开发,同样,NSThread类提供对多线程开发的支持时也面临多线程的共享数据管理和死锁问题,于是iPhone也提供了类似于Java线程池的解决方案:任务队列NSOperationQueue类。
和Java语言的Runnable接口一样,iPhone提供了NSOperation接口进行任务对象的封装,而通过将任务对象加入到NSOperationQueue队列,NSOperationQueue队列会分配线程进行任务对象的执行,任务对象的执行通过- (void)main方法,下面是典型的任务对象和任务队列的实现:
@interface ThreadPoolTask:NSOperation
{
}
@end
@implementation ThreadPoolTask
- (void)main
{
NSLog(@”start execute”);
}
@end
和Java语言中一样,构造一个多线程池并添加任务对象到线程池中,线程池会调用任务对象的- (void)main方法执行任务,iPhone中典型的任务队列的实现如下:
NSOperationQueue* threadPool = [[NSOperation alloc] init];
[threadPool setMaxConcurrentOperationCount:4];
for(int i = 1;i <= 5;i++)
{
NSString* task = [NSString stringWithFormat:@”task %d”,i];
NSLog(@“put %@”,task);
threadPool.add([[ThreadPoolTask alloc] init));
}
可以看到,iPhone通过NSOperationQueue提供了一套类似于线程池的机制,通过它可以更加方便的进行多线程的并发操作,从而使得程序员从繁杂的多线程共享数据管理和死锁问题中解脱出来。
发表评论
-
Phone应用开发之十二:使用ShareKit一键分享到Facebook,Twitter等平台
2012-02-12 18:27 0ShareKit是iPhone开发的第三方接口,允许你一 ... -
iPhone应用开发之十一:常用的三种动画表现效果
2012-02-12 18:24 0From:http://www.2cto.com/kf/201 ... -
iphone应用开发之十:发送短信/邮件/打电话
2012-02-20 22:00 922From:http://www.2cto.com/kf/201 ... -
iPhone应用开发之六:UITableView的详细讲解(一)
2012-02-12 18:02 0From:http://www.2cto.com/kf/201 ... -
iPhone应用开发之五: UIScrollView的详细讲解
2012-02-26 17:45 986From:http://www.2cto.com/kf/201 ... -
iPhone应用开发之四:UIImageView和UIWebView的详细讲解
2012-02-27 09:14 1307From: http://www.2cto.com/kf/20 ... -
iPhone应用开发之三:UILable和UITextField的详细讲解
2012-02-25 17:41 1106From:http://www.2cto.com/kf/201 ... -
iPhone 应用开发之二:UITextView控件的详细讲解
2012-02-26 17:45 1094From:http://www.2cto.com/kf/201 ... -
iPhone应用开发之一:窗口,视图,视图控制器和UIKit基础
2012-02-29 09:12 1004From:http://www.2cto.com/kf/201 ... -
iPhone开发的门槛和成本及线路图
2012-02-12 15:42 0From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(11)--- 多线程的使用与注意事项
2012-02-25 17:40 988From:http://www.2cto.com/kf/ ... -
iPhone开发进阶(10)--- 在程序中使用GPS
2012-02-25 17:41 883From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(9)--- 用SQLite管理数据库
2012-02-27 09:10 875From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(8)--- 检测屏幕触摸事件
2012-02-25 17:39 918From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(7)--- 利用ModalViewController切换View
2012-02-27 09:09 969From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(6)--- 编程定制UIButton
2012-02-12 15:29 0From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(5) --- 编程定制UIViewController
2012-02-12 15:26 0From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(4) --- 使用Makefile自动编译iPhone程序
2012-02-12 15:25 0From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(3) --- iPhone应用程序的启动过程
2012-02-12 15:15 0From:http://www.2cto.com/kf/201 ... -
iPhone开发进阶(2) --- iPhone应用程序/项目的构成
2012-02-26 17:43 950开发iPhone程序,首先接触到的不是源代码,而是项目工 ...
相关推荐
主要是通过iphone客户端访问java后台的webservice,然后用json解析xml文件,然后获取数据
电脑需预先安装JDK 空间说说由iPhone发表,Java源代码
java爬取亚马逊的Iphone信息.zip java爬取亚马逊的Iphone信息.zip
iphone 推送通知 服务器端java 实现 iphone 推送通知 APNS 包含所需jar包和实现代码
这个压缩包里面包含三个DOC文件:1.iphone推送java实现.doc 2.iphone推送简单JAVA示例.doc 3.实现iphone推送服务端原理.doc 三个文档很全面的指导学者学习怎么用java实现ios推送功能,不仅仅是讲解怎么实现,还讲解...
iPhone操作手册,内部资料,每个操作的详细过程,英文版原版
java爬取亚马逊的Iphone信息
java给iphone应用实现推送
iphone相机自动去重 详细可见博客:https://blog.csdn.net/qq_26012495/article/details/132248085 我们在将iphone照片拷贝到电脑的过程中(USB接入电脑拷贝的方式),如果喜欢使用16:9来拍照或者出现过不是默认的4...
然后随后将服务器的信息接收并且保存在APNS当中,APNS从其中注册的列表中查找该设备(设备可以为iPhone、iPad、iTouch)并将信息发送到该设备;最后,设备接收到数据信息给相应的APP,并按照设定弹出Push信息。
先前一直在做java服务器,最近要开发用到php,这其中遇到的最让人纠结的要属php、Android和iPhone三个平台加解密不一致的问题。因为手机端后台通常是用php开发的Web Service,Android和iPhone客户端调用同样的Web ...
java 图片压缩 iphone拍照上传旋转问题处理,压缩工具类 首先导入jar 包,通过imgxz获取图片是否旋转属性,在调用旋转方法,旋转过来,然后在进行压缩
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
phone模拟器能在电脑上模拟iphone手机的操作,该iphone模拟器为adobe air应用,能在电脑上完美模拟iphone手机操作功能,可跨平台运行。 这款iphone模拟器iphone浏览器功能可正常使用,其它功能目前仅为初步的模拟,...
iphone4操作指南iphone4操作指南iphone4操作指南
Iphone桌面图标快捷操作源码 Winform 模拟Iphone界面,可供想做 漂亮界面的朋友参考
可以显示iphone客户端,普通的手机使用也可以显示,没钱买iphone也可以显摆了
C# 实现Iphone界面的桌面图标快捷操作 Iphone快捷方式管理器——C#实现Iphone界面的桌面图标快捷操作,将Iphone手机的界面功能搬到了电脑上,当然这里打开的是你电脑的内容,是一个快捷方式集合,自己编着玩的产物,...
iphone操作摄像头的示例代码,对iOS开发有用
java 向iphone推送信息