iOS 多线程篇2—创建线程

转载 2016年05月30日 11:07:12

一、创建和启动线程简单说明

一个NSThread对象就代表一条线程

创建、启动线程

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

[thread start];

// 线程一启动,就会在线程thread中执行self的run方法

主线程相关用法

+ (NSThread *)mainThread; // 获得主线程

- (BOOL)isMainThread; // 是否为主线程

+ (BOOL)isMainThread; // 是否为主线程

其他用法

获得当前线程

NSThread *current = [NSThread currentThread];

线程的调度优先级:调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高

+ (double)threadPriority;

+ (BOOL)setThreadPriority:(double)p;

设置线程的名字

- (void)setName:(NSString *)n;

- (NSString *)name;

其他创建线程的方式
(2)创建线程后自动启动线程

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

(3)隐式创建并启动线程

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

上述2种创建线程方式的优缺点
优点:简单快捷
缺点:无法对线程进行更详细的设置

二、代码示例

1.使用古老的方式创建

//
//  YYViewController.m
//
//
//  Created by apple on 14-6-23.
//  Copyright (c) 2014年 itcase. All rights reserved.
//


#import "YYViewController.h"
#import <pthread.h>


@interface YYViewController ()
- (IBAction)btnClick;
@end


@implementation YYViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
}


//按钮的点击事件
- (IBAction)btnClick {
    //1.获取当前线程
    NSThread *current=[NSThread currentThread];
    //主线程
    NSLog(@"btnClick----%@",current);   

    //2.使用for循环执行一些耗时操作
   pthread_t thread;
    pthread_create(&thread, NULL, run, NULL);
}


//c语言函数
void *run(void *data)
{
    //获取当前线程,是新创建出来的线程
    NSThread *current=[NSThread currentThread];


    for (int i=0; i<10000; i++) {
        NSLog(@"btnClick---%d---%@",i,current);
    }
    return NULL;
}

//多个线程,点击按钮执行按钮调用方法的时候,主线程没有被阻塞

@end

实现效果:

image

打印结果:
image

2.使用NSThread创建线程

//
//  YYViewController.m
//
//
//  Created by apple on 14-6-23.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import <pthread.h>


@interface YYViewController ()
- (IBAction)btnClick;
@end


@implementation YYViewController 

- (void)viewDidLoad
{
    [super viewDidLoad];
}


//按钮的点击事件
- (IBAction)btnClick {
    //1.获取当前线程
    NSThread *current=[NSThread currentThread];
    //主线程
    NSLog(@"btnClick----%@",current);

    //获取主线程的另外一种方式
   NSThread *main=[NSThread mainThread];
    NSLog(@"主线程-------%@",main);

    //2.执行一些耗时操作
    [self creatNSThread];
//    [self creatNSThread2];
//    [self creatNSThread3];
}


/**
 * NSThread创建线程方式1
 * 1> 先创建初始化线程
 * 2> start开启线程
 */
-(void)creatNSThread
{
    NSThread  *thread=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"线程A"];
    //为线程设置一个名称
    thread.name=@"线程A";
     //开启线程
    [thread start];


    NSThread  *thread2=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"线程B"];
    //为线程设置一个名称
    thread2.name=@"线程B";
   //开启线程
    [thread2 start];
}


/**
 * NSThread创建线程方式2
*创建完线程直接(自动)启动
 */

-(void)creatNSThread2
{
//    NSThread *thread=[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"创建完线程直接(自动)启动"];

    [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"创建完线程直接(自动)启动"];
}


/**
 * NSThread创建线程方式3
 * 隐式创建线程, 并且直接(自动)启动
 */

-(void)creatNSThread3
{
    //在后台线程中执行===在子线程中执行
    [self performSelectorInBackground:@selector(run:) withObject:@"隐式创建"];
}



-(void)run:(NSString *)str
{
   //获取当前线程
    NSThread *current=[NSThread currentThread];
    //打印输出
    for (int i=0; i<10; i++) {
       NSLog(@"run---%@---%@",current,str);
    }
}
@end

调用线程1,打印结果为:
image
调用线程2
image
调用线程3
image

相关文章推荐

iOS 多线程篇4—线程间的通信

一、简单说明线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信线程间通信的体现1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务线程间...

iOS 网络篇3—HTTP协议

说明:apache tomcat服务器必须占用8080端口 一、URL1.基本介绍URL的全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1...

iOS开发多线程篇—创建线程

一、创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建、启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarg...

iOS开发多线程—02创建线程

iOS开发多线程篇—创建线程 一、创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建、启动线程 (1) NSThread *thread = [[NSThread alloc] i...

ios开发多线程篇——创建线程

一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建,启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:sel...

iOS开发多线程-创建线程

iOS中实现多线程的方案有4种 一、创建和启动线程简单说明   一个NSThread对象就代表一条线程   创建、启动线程   (1) NSThread *thread = [[NSThread...

【iOS开发-多线程】使用NSOperation创建线程(使用较多)

NSOperationNSOperation封装了GCD的一些操作,使用更加面向对象的方式实现多线程创建多线程的步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperati...
  • ttf1993
  • ttf1993
  • 2015年05月17日 15:01
  • 504

iOS开发之多线程(NSThread创建线程)

用NSThread创建线程 iOS开发多线程-创建线程 一 创建和启动线程简单说明         一个NSThread对象就代表了一条线程         创建,启动线程         ...

2. 初学Java多线程:用Thread类创建线程

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。任何一个Java程序都必须有一个主线程。学习Java多线程,需要先从用Thread类创建线程开始。         在Ja...

转载:Java多线程初学者指南(2):用Thread类创建线程

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 多线程篇2—创建线程
举报原因:
原因补充:

(最多只允许输入30个字)