. 三种创建线程的方法

 //第一种

      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. Maven进价:Maven构建系列文章

    Maven:基于Java平台的项目构建.依赖管理和项目信息管理. 1.构建 Maven标准化了构建过程 构建过程:编译.运行单元测试.生成文档.打包和部署 避免重复:设计.编码.文档.构建 2.依赖管 ...

  2. 【HTML】Iframe中的onload事件

    当iframe.src重新指定一个url时会重新执行iframe的onload事件 <iframe id="indexFrame" name="index" ...

  3. 【原创】C#搭建足球赛事资料库与预测平台(5) 赔率数据表设计1

            本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 开源C#彩票数据资料库系列文章总目录:http://www.cn ...

  4. 编译Libgdiplus遇到的问题

    https://github.com/mono/libgdiplus/releases 下载最新版本 解压并执行  ./autogen.sh,在执行此步时遇到如下问题,并帖出解决办法   问题:执行  ...

  5. [Python] Remote debugging by Pycharm

    From: http://blog.csdn.net/u013088062/article/details/50170551 虚拟环境配置 配置远程解释器 设想这样一种情况,你在一个平台上操作你的工程 ...

  6. 主机访问虚拟机中linux上的web服务

    环境:主机windows xp 虚拟机centos 6.4 [root@localhost /]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT[root ...

  7. PintJS – 轻量,并发的 GruntJS 运行器

    PintJS 是一个小型.异步的 GruntJS 运行器,试图解决大规模构建流程中的一些问题. 典型的Gruntfile 会包括 jsHint,jasmine,LESS,handlebars, ugl ...

  8. Mysql 修改密码及重置密码方法

    修改密码: //选择数据库 use mysql; //修改密码 update user set password=password('新密码') where user='root'; //立即生效 f ...

  9. Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

    序言 使用Ubuntu和vim已经有一段时间了,对于Vim下的插件应用,我总是抱着一股狂热的态度.这次,又在网上闲逛着,发现了一个个人博客提到了Vim代码补全这回事,并提到了YouCompleteMe ...

  10. Oracle工程建设行业解决方案

    为何选择Oracle工程建设行业解决方案? Oracle为工程建设企业提供一套全面.开放且集成的业务管理软件.服务器和存储解决方案.这些解决方案经过集成设计,能够实现卓越性能,从而优化业务的方方面面. ...