• iOS多线程初见


      1 1. 三种创建线程的方法
      2 
      3 //第一种
      4 
      5      NSThread * thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(doAction) object:nil];
      6 
      7     //线程名
      8 
      9     thread1.name = @"thread1";
     10 
     11     //线程优先级,0 ~ 1
     12 
     13     thread1.threadPriority = 1.0;
     14 
     15     //开启线程
     16 
     17     [thread1 start];
     18 
     19 //第二种
     20 
     21     //通过类方法创建线程,不用显示的开启start
     22 
     23     [NSThread detachNewThreadSelector:@selector(doAction) toTarget:self withObject:nil];
     24 
     25 //第三种
     26 
     27     //隐式创建多线程
     28 
     29     [self performSelectorInBackground:@selector(doAction:) withObject:nil];
     30 
     31     
     32 
     33  
     34 
     35 @implementation ViewController
     36 
     37 - (void)viewDidLoad {
     38 
     39     [super viewDidLoad];
     40 
     41     // Do any additional setup after loading the view, typically from a nib.
     42 
     43     
     44 
     45  
     46 
     47     NSLog(@"mainThread - %@",[NSThread mainThread]);
     48 
     49  
     50 
     51     NSThread * thread = [[NSThread alloc] initWithTarget:self selector:@selector(handleAction) object:nil];
     52 
     53     
     54 
     55     //就绪状态
     56 
     57     [thread start];
     58 
     59 }
     60 
     61  
     62 
     63 - (void)handleAction {
     64 
     65     
     66 
     67     for (NSInteger i = 0 ; i < 100; i ++) {
     68 
     69         
     70 
     71         //阻塞状态
     72 
     73 //        [NSThread sleepForTimeInterval:2];
     74 
     75 //        [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]];
     76 
     77         
     78 
     79 //        NSLog(@"%@,%@",[NSThread currentThread],@(i));
     80 
     81         //可以在子线程获取主线程
     82 
     83         NSLog(@"mainThread - %@",[NSThread mainThread]);    
     84 
     85         if (i == 10) {
     86 
     87             //退出
     88 
     89             [NSThread exit];
     90 
     91         } 
     92 
     93     }
     94 
     95 }
     96 
     97 3.同步代码块实现买票功能
     98 
     99 @implementation ViewController
    100 
    101  
    102 
    103 - (void)viewDidLoad {
    104 
    105     [super viewDidLoad];
    106 
    107     // Do any additional setup after loading the view, typically from a nib.
    108 
    109     
    110 
    111     self.tickets = 20;
    112 
    113     
    114 
    115     NSThread * thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
    116 
    117 //    thread1.name = @"computer";
    118 
    119     
    120 
    121     [thread1 start];
    122 
    123  
    124 
    125     
    126 
    127     NSThread * thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
    128 
    129 //    thread2.name = @"phone";
    130 
    131     
    132 
    133     [thread2 start];
    134 
    135 }
    136 
    137  
    138 
    139 - (void)saleTicket {
    140 
    141     
    142 
    143     
    144 
    145     while (1) {
    146 
    147     
    148 
    149 //        [NSThread sleepForTimeInterval:1];
    150 
    151         
    152 
    153         
    154 
    155         //token必须所有线程都能访问到,一般用self
    156 
    157         
    158 
    159 //        @synchronized() {
    160 
    161         
    162 
    163             //代码段
    164 
    165 //        }
    166 
    167         
    168 
    169         
    170 
    171 //        NSObject * o = [[NSObject alloc] init];
    172 
    173         
    174 
    175         //互斥锁
    176 
    177         @synchronized(self) {
    178 
    179             
    180 
    181             [NSThread sleepForTimeInterval:2];
    182 
    183             
    184 
    185             if (self.tickets > 0) {
    186 
    187                 
    188 
    189                 NSLog(@"%@ 还有余票 %@ 张",[NSThread currentThread],@(self.tickets));
    190 
    191                 
    192 
    193                 self.tickets -- ;
    194 
    195                 
    196 
    197             } else {
    198 
    199                 
    200 
    201                 NSLog(@"票卖完了");
    202 
    203                 
    204 
    205                 break;
    206 
    207             }
    208 
    209             
    210 
    211         }
    212 
    213   
    214 
    215     }
    216 
    217     
    218 
    219 }
    220 
    221  
  • 相关阅读:
    IDEA创建WEB项目部署详细步骤
    Java计算两个日期相差的天数
    使用Callable和Future创建线程
    Java使用POI导出Excel表格
    关于Intellij IDEA的使用小技巧
    python描述符
    登录百度下载博客
    WINDOWS下Mysql的安装
    迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有
    Python札记 -- 装饰器
  • 原文地址:https://www.cnblogs.com/iOSlearner/p/5277377.html
Copyright © 2020-2023  润新知