- 浏览: 1341328 次
- 性别:
- 来自: 成都
-
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
作者
孙东风
2011-1-12
转载请注明出处
http://blog.csdn.net/dongfengsun/archive/2011/01/12/6130683.aspx
引言
在涉及多线程并发操作时,如何管理多线程对共享数据的访问以及防止线程间的死锁问题是个很重要的话题。在
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
提供了一套类似于线程池的机制,通过它可以更加方便的进行多线程的并发操作,从而使得程序员从繁杂的多线程共享数据管理和死锁问题中解脱出来。
发表评论
-
ios 声音合成
2013-08-18 13:20 1308http://stackoverflow.com/ques ... -
__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用 20 三
2012-12-24 01:41 1735使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用 ... -
CAAnimation
2012-12-23 01:09 2368CAAnimation采用了CAMediaTi ... -
UIViewAnimation动画与Core Animation的CATransition类动画
2012-12-23 01:06 2774使用UIView类函数实现://U ... -
GCD实战2:资源竞争
2012-12-23 01:04 1617转自http://www.dreamingwish.co ... -
GCD实战一:使用串行队列实现简单的预加载
2012-12-22 17:10 2941转自 http://www.dreamingwish.c ... -
GCD介绍(四): 完结
2012-12-22 17:08 1439转自 http://www.dreamingwish.c ... -
GCD介绍(三): Dispatch Sources
2012-12-22 17:07 1681转自 http://www.dreamingwish.com/ ... -
GCD介绍(二): 多核心的性能
2012-12-22 17:05 1230转自http://www.dreamingwish.co ... -
基本概念和Dispatch Queue
2012-12-22 17:03 1422转自 http://www.dreamingwish.c ... -
Best Audio Format for iPhone Audio Programming
2012-12-19 16:26 2612I had never done audio p ... -
LAME 是一个开源的MP3解码编码工具
2012-12-19 13:09 8653MP3 Encoding * 编码MP3文件必须按如下 ... -
sqlite3中的数据类型
2012-12-10 21:37 1360(转)http://www.cnblogs.com/kfqco ... -
ios随机数,and()、random()、arc4random()
2012-11-15 11:06 4746原文:http://bj007.blog.51cto.c ... -
IPHONE GIF 播放的方式
2012-10-11 18:30 1475转 http://blog.csdn.net/zltia ... -
在新线程中使用NSTimer
2012-10-11 18:21 1604转自 http://blog.csdn.net/sjzs ... -
Creating an iPhone Daemon – Part 5
2012-09-02 15:29 1550Creating an iPhone Daemon – ... -
Creating an iPhone Daemon – Part 4
2012-09-02 15:28 1419Creating an iPhone Daemon – ... -
Creating an iPhone Daemon – Part 3
2012-09-02 15:25 1518This is part three of the bl ... -
Creating an iPhone Daemon – Part 2
2012-09-02 15:24 1273Here is part two of the blog ...
相关推荐
在iOS开发中,iPhone应用程序与Java后端进行交互是一个常见的需求,这通常涉及到Web服务的使用,特别是WebService接口。WebService是一种使不同系统间能够交换数据的技术,而JSON(JavaScript Object Notation)则是...
标题中的“空间说说由iPhone发表,Java源代码”指的是一个使用Java编程语言开发的程序,这个程序能够让用户通过iPhone设备在社交空间上发布说说或者动态。这可能是一个独立的应用程序或者是某个社交网络API的Java...
拟iPhone对话样式包Java资源包
在iOS应用开发中,为了实现在用户...以上就是关于“iPhone推送通知服务器端Java实现”的详细说明,希望对你理解并实际操作APNs推送有所帮助。在实际开发中,记得遵循苹果的开发者指南,确保推送通知的合规性和有效性。
在本项目中,“java爬取亚马逊的Iphone信息.zip”是一个包含使用Java语言编写爬虫程序,用于抓取亚马逊网站上iPhone相关信息的压缩文件。这个压缩包可能包含了源代码、日志、配置文件等资源,便于理解和复现爬取过程...
在Java开发中,处理图像尤其是来自移动设备如iPhone的照片时,常常会遇到一些特定的问题,例如照片上传时的旋转问题。这是因为iOS设备在拍摄照片时可能会记录照片的元数据(Exif信息),其中包括照片的旋转角度,这...
这个压缩包里面包含三个DOC文件:1.iphone推送java实现.doc 2.iphone推送简单JAVA示例.doc 3.实现iphone推送服务端原理.doc 三个文档很全面的指导学者学习怎么用java实现ios推送功能,不仅仅是讲解怎么实现,还讲解...
标题提到的“实现前端、Android、iPhone和Java后端四个平台一致的加密工具”旨在解决跨平台应用间数据加密的一致性问题,使得无论在哪个平台上,数据都能得到相同的加密处理,从而提高安全性并简化开发流程。...
Java为iPhone应用实现推送服务主要涉及的是远程通知技术,这是iOS设备与服务器间通信的一种方式,使得即使应用程序在后台或关闭状态下,也能接收到新消息、更新或其他重要信息。在这个过程中,Java作为服务器端的...
iphone相机自动去重 详细可见博客:https://blog.csdn.net/qq_26012495/article/details/132248085 我们在将iphone照片拷贝到电脑的过程中(USB接入电脑拷贝的方式),如果喜欢使用16:9来拍照或者出现过不是默认的4...
例如,你可以将序列化操作放在主队列中,以更新UI,而将反序列化放在后台队列,提高性能。 通过这个实验,开发者可以更好地理解和掌握iPhone应用中的数据持久化以及并发处理技术,这对于构建高效、稳定的应用至关...
然后随后将服务器的信息接收并且保存在APNS当中,APNS从其中注册的列表中查找该设备(设备可以为iPhone、iPad、iTouch)并将信息发送到该设备;最后,设备接收到数据信息给相应的APP,并按照设定弹出Push信息。
在本项目中,我们主要探讨如何使用Java编程语言来实现一个网络爬虫,目标是抓取亚马逊网站上关于iPhone的相关信息。爬虫是自动化获取网页数据的重要工具,它可以帮助我们批量收集、处理和分析网络上的大量信息。在这...
标题提到的"Android、iPhone和Java三个平台一致的加密方法"是一个关键的话题,它涉及到如何在不同的操作系统和环境中实现相同的安全加密策略。在现代软件开发中,数据安全至关重要,加密技术则为数据保护提供了基础...
《iPhone官方简体中文手册》是一份全面介绍iPhone使用、设置和管理的综合指南,旨在帮助用户更好地理解和操作苹果公司的智能手机产品。这份手册分为多个部分,涵盖了从基础操作到高级功能的广泛内容,确保无论是初次...
在JAVA平台上,开发者为了满足不同设备的屏幕尺寸需求,精心制作了多个版本,包括240x320、320x240、176x208以及针对iPhone的屏幕尺寸,以确保游戏在各种设备上都能呈现出最佳的视觉效果和操作体验。 首先,我们来...
【Java Ext SSH Andrew iPhone 学习之路】 Java SE(Standard Edition)是Java开发的基础,但随着技术的深入,开发者往往需要扩展自己的技能树,进入更高级的领域,如Web开发、移动开发等。这里我们将探讨Java Ext...
《iPhone 4 操作指南》 iPhone 4 是苹果公司推出的一款经典智能手机,其操作系统直观易用,深受用户喜爱。本指南将详细介绍iPhone 4的基础操作,包括按键功能、开机激活、通讯录管理等核心内容。 一、iPhone 4 ...
先前一直在做java服务器,最近要开发用到php,这其中遇到的最让人纠结的要属php、Android和iPhone三个平台加解密不一致的问题。因为手机端后台通常是用php开发的Web Service,Android和iPhone客户端调用同样的Web ...