`
janedoneway
  • 浏览: 582077 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

iPhone操作队列 VS Java线程池

 
阅读更多

 

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提供了一套类似于线程池的机制,通过它可以更加方便的进行多线程的并发操作,从而使得程序员从繁杂的多线程共享数据管理和死锁问题中解脱出来。

分享到:
评论

相关推荐

    iphone访问java 后台webservice

    在iOS开发中,iPhone应用程序与Java后端进行交互是一个常见的需求,这通常涉及到Web服务的使用,特别是WebService接口。WebService是一种使不同系统间能够交换数据的技术,而JSON(JavaScript Object Notation)则是...

    空间说说由iPhone发表,Java源代码

    标题中的“空间说说由iPhone发表,Java源代码”指的是一个使用Java编程语言开发的程序,这个程序能够让用户通过iPhone设备在社交空间上发布说说或者动态。这可能是一个独立的应用程序或者是某个社交网络API的Java...

    拟iPhone对话样式包Java资源包.zip

    拟iPhone对话样式包Java资源包

    iphone 推送通知 服务器端java 实现

    在iOS应用开发中,为了实现在用户...以上就是关于“iPhone推送通知服务器端Java实现”的详细说明,希望对你理解并实际操作APNs推送有所帮助。在实际开发中,记得遵循苹果的开发者指南,确保推送通知的合规性和有效性。

    java爬取亚马逊的Iphone信息.zip

    在本项目中,“java爬取亚马逊的Iphone信息.zip”是一个包含使用Java语言编写爬虫程序,用于抓取亚马逊网站上iPhone相关信息的压缩文件。这个压缩包可能包含了源代码、日志、配置文件等资源,便于理解和复现爬取过程...

    java 图片压缩 iphone拍照上传旋转问题处理压缩工具类

    在Java开发中,处理图像尤其是来自移动设备如iPhone的照片时,常常会遇到一些特定的问题,例如照片上传时的旋转问题。这是因为iOS设备在拍摄照片时可能会记录照片的元数据(Exif信息),其中包括照片的旋转角度,这...

    java实现IPHONE推送功能技术文档

    这个压缩包里面包含三个DOC文件:1.iphone推送java实现.doc 2.iphone推送简单JAVA示例.doc 3.实现iphone推送服务端原理.doc 三个文档很全面的指导学者学习怎么用java实现ios推送功能,不仅仅是讲解怎么实现,还讲解...

    iPhone操作手册

    iPhone操作手册,内部资料,每个操作的详细过程,英文版原版

    实现前端、Android、iPhone和Java后端四个平台一致的加密工具

    标题提到的“实现前端、Android、iPhone和Java后端四个平台一致的加密工具”旨在解决跨平台应用间数据加密的一致性问题,使得无论在哪个平台上,数据都能得到相同的加密处理,从而提高安全性并简化开发流程。...

    java给iphone应用实现推送

    Java为iPhone应用实现推送服务主要涉及的是远程通知技术,这是iOS设备与服务器间通信的一种方式,使得即使应用程序在后台或关闭状态下,也能接收到新消息、更新或其他重要信息。在这个过程中,Java作为服务器端的...

    iphone拷贝照片中间带E自动去重软件,需要java环境 无java环境的下载另一个

    iphone相机自动去重 详细可见博客:https://blog.csdn.net/qq_26012495/article/details/132248085 我们在将iphone照片拷贝到电脑的过程中(USB接入电脑拷贝的方式),如果喜欢使用16:9来拍照或者出现过不是默认的4...

    Iphone 序列化与反序列化,队列的实例

    例如,你可以将序列化操作放在主队列中,以更新UI,而将反序列化放在后台队列,提高性能。 通过这个实验,开发者可以更好地理解和掌握iPhone应用中的数据持久化以及并发处理技术,这对于构建高效、稳定的应用至关...

    java实现给Iphone推送消息

    然后随后将服务器的信息接收并且保存在APNS当中,APNS从其中注册的列表中查找该设备(设备可以为iPhone、iPad、iTouch)并将信息发送到该设备;最后,设备接收到数据信息给相应的APP,并按照设定弹出Push信息。

    java爬取亚马逊的Iphone信息

    在本项目中,我们主要探讨如何使用Java编程语言来实现一个网络爬虫,目标是抓取亚马逊网站上关于iPhone的相关信息。爬虫是自动化获取网页数据的重要工具,它可以帮助我们批量收集、处理和分析网络上的大量信息。在这...

    Android、iPhone和Java三个平台一致的加密方法

    标题提到的"Android、iPhone和Java三个平台一致的加密方法"是一个关键的话题,它涉及到如何在不同的操作系统和环境中实现相同的安全加密策略。在现代软件开发中,数据安全至关重要,加密技术则为数据保护提供了基础...

    iphone 官方简体中文手册

    《iPhone官方简体中文手册》是一份全面介绍iPhone使用、设置和管理的综合指南,旨在帮助用户更好地理解和操作苹果公司的智能手机产品。这份手册分为多个部分,涵盖了从基础操作到高级功能的广泛内容,确保无论是初次...

    JAVA愤怒的小鸟240x320;320x240;176x208;iphone尺寸

    在JAVA平台上,开发者为了满足不同设备的屏幕尺寸需求,精心制作了多个版本,包括240x320、320x240、176x208以及针对iPhone的屏幕尺寸,以确保游戏在各种设备上都能呈现出最佳的视觉效果和操作体验。 首先,我们来...

    java ext ssh andrew iphone 新生学习之路

    【Java Ext SSH Andrew iPhone 学习之路】 Java SE(Standard Edition)是Java开发的基础,但随着技术的深入,开发者往往需要扩展自己的技能树,进入更高级的领域,如Web开发、移动开发等。这里我们将探讨Java Ext...

    iphone4操作指南

    《iPhone 4 操作指南》 iPhone 4 是苹果公司推出的一款经典智能手机,其操作系统直观易用,深受用户喜爱。本指南将详细介绍iPhone 4的基础操作,包括按键功能、开机激活、通讯录管理等核心内容。 一、iPhone 4 ...

    Android、iPhone和Java、php四个平台一致的3des加密的类

    先前一直在做java服务器,最近要开发用到php,这其中遇到的最让人纠结的要属php、Android和iPhone三个平台加解密不一致的问题。因为手机端后台通常是用php开发的Web Service,Android和iPhone客户端调用同样的Web ...

Global site tag (gtag.js) - Google Analytics