. 三种创建线程的方法

 //第一种

      NSThread * thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(doAction) object:nil];

     //线程名

     thread1.name = @"thread1";

     //线程优先级,0 ~ 1

     thread1.threadPriority = 1.0;

     //开启线程

     [thread1 start];

 //第二种

     //通过类方法创建线程,不用显示的开启start

     [NSThread detachNewThreadSelector:@selector(doAction) toTarget:self withObject:nil];

 //第三种

     //隐式创建多线程

     [self performSelectorInBackground:@selector(doAction:) withObject:nil];

 @implementation ViewController

 - (void)viewDidLoad {

     [super viewDidLoad];

     // Do any additional setup after loading the view, typically from a nib.

     NSLog(@"mainThread - %@",[NSThread mainThread]);

     NSThread * thread = [[NSThread alloc] initWithTarget:self selector:@selector(handleAction) object:nil];

     //就绪状态

     [thread start];

 }

 - (void)handleAction {

     for (NSInteger i =  ; i < ; i ++) {

         //阻塞状态

 //        [NSThread sleepForTimeInterval:2];

 //        [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]];

 //        NSLog(@"%@,%@",[NSThread currentThread],@(i));

         //可以在子线程获取主线程

         NSLog(@"mainThread - %@",[NSThread mainThread]);    

         if (i == ) {

             //退出

             [NSThread exit];

         } 

     }

 }

 .同步代码块实现买票功能

 @implementation ViewController

 - (void)viewDidLoad {

     [super viewDidLoad];

     // Do any additional setup after loading the view, typically from a nib.

     self.tickets = ;

     NSThread * thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];

 //    thread1.name = @"computer";

     [thread1 start];

     NSThread * thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];

 //    thread2.name = @"phone";

     [thread2 start];

 }

 - (void)saleTicket {

     while () {

 //        [NSThread sleepForTimeInterval:1];

         //token必须所有线程都能访问到,一般用self

 //        @synchronized() {

             //代码段

 //        }

 //        NSObject * o = [[NSObject alloc] init];

         //互斥锁

         @synchronized(self) {

             [NSThread sleepForTimeInterval:];

             if (self.tickets > ) {

                 NSLog(@"%@ 还有余票 %@ 张",[NSThread currentThread],@(self.tickets));

                 self.tickets -- ;

             } else {

                 NSLog(@"票卖完了");

                 break;

             }

         }

     }

 }

iOS多线程初见的更多相关文章

  1. iOS多线程主题

    下面是:2个并发进程.和2个并发线程的示意图: 下面介绍三种多线程技术(Thread.Cocoa Operation.Grand Central Dispatch): 1.最轻量级Thread(需要自 ...

  2. iOS多线程技术方案

    iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...

  3. iOS 多线程GCD的基本使用

    <iOS多线程简介>中提到:GCD中有2个核心概念:1.任务(执行什么操作)2.队列(用来存放任务) 那么多线程GCD的基本使用有哪些呢? 可以分以下多种情况: 1.异步函数 + 并发队列 ...

  4. iOS多线程到底不安全在哪里?

    iOS多线程安全的概念在很多地方都会遇到,为什么不安全,不安全又该怎么去定义,其实是个值得深究的话题. 共享状态,多线程共同访问某个对象的property,在iOS编程里是很普遍的使用场景,我们就从P ...

  5. iOS多线程的详情使用示例--简进祥

    大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能 ...

  6. iOS多线程

    关于iOS多线程 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方 ...

  7. iOS多线程学习及总结

    能有份网上的存储资料,备以后提升及参考 iOS 多线程编程 简介 一.      iOS有三种多线程编程的技术,分别是: 1.        NSThread 2.        Cocoa NSOp ...

  8. iOS多线程杂论

    iOS多线程的分布 (1) NSThread (2) NSOperation (3) GCD 现在对下面三个进行一个个的分析,希望那里说得不对的地方希望简友们帮我指点一二. 1,NSThread 优点 ...

  9. iOS多线程开发

    概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操 ...

随机推荐

  1. 基于jquery的响应式提示框SweetAlert

    介绍款交互性非常不错的jquery弹出层插件,支持消息提示.错误提示.确认框提示等.交互式体验感非常不错,比如咱们现在体验非常不错的微信支付.支付宝等完成后的效果.不过本插件至少支持IE9+.使用方式 ...

  2. 在win2008中安装vs2005

    原文引用:http://www.cnblogs.com/ljzforever/archive/2009/04/13/1434799.html win2008下安装Visual Studio 2005, ...

  3. JS基础回顾,小练习(判断数组,以及函数)

    追梦子博客版权所有. // 判断arr是否为一个数组,返回一个bool值 方法1: function isArray(arr) { var str = arr.__proto__.constructo ...

  4. sqlserver -- 学习笔记(五)查询一天、一周、一个月记录(DateDiff 函数)(备忘)

    Learn From : http://bjtdeyx.iteye.com/blog/1447300 最常见的sql日期查询的语句 --查询当天日期在一周年的数据 ) --查询当天的所有数据 ) -- ...

  5. c# 无法引用自己创建的类库

    今个测试一个项目,居然无法引用自己创建的类库,我很费解,然后各种测试,修改修饰符,更改强类型,各种测试,最后无聊点开类库的属性  发现居然需要引用的项目与被引用的类库的框架不一样,修改了之后就可以正常 ...

  6. MongoDB入门二:基本概念

    前言 工欲善其事必先利其器.在学习MongoDB之前,需要对MongoDB的一些基本概念有系统的了解. 所以,本篇文章主要介绍MongoDB的一些基本概念,这些概念的定义均来自<MongoDB权 ...

  7. LoRaWAN协议(三)--Server端数据协议

    LoRaWAN Server 端架构 LoRaWAN 的server包括 NS(Network server).AS(application server).CS(Custom server).... ...

  8. Mysql学习笔记(六)增删改查

    PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values(" ...

  9. 2013/11/21工作随笔-PHP开启多进程

    今天被问到一个问题,php如何开启多进程才比较稳定. php开启多进程执行一个操作有哪些方法: 首先想到的是使用pcntl的fork 具体可以参考之前的文章:PHP的pcntl多进程 其次想到的方法是 ...

  10. C# 泛型简介

    摘要:本文讨论泛型处理的问题空间.它们的实现方式.该编程模型的好处,以及独特的创新(例如,约束.一般方法和委托以及一般继承).此外,本文还讨论 .NET Framework 如何利用泛型. 下载 Ge ...