线程锁

多线程实现方式

1.NSThread  NSOperation  GCD

一,线程的概念

程序,进程,线程

程序:一些指令的集合

进程:运行中的程序,需要占用内存空间,也是操作系统分配资源的基本单位

线程:是进程的基本组成部分,每个进程至少有一个线程   iOS应用程序默认创建了一个主线程,系统会自动维护这个线程的生命周期,如果是操作时间比较长的代码,比如:网络下载,数据库的操作,如果在主线程执行,会阻塞主线程,所有我们需要创建自己的主线程

二,为什么使用线程

三,(NSThead) 怎样创建线程

1> 第一种方式

initWithTarget:(id)target selector:(SEL)selector object;(id)object

/**

第一个参数:线程执行体方法所属的对象

第二个参数:线程执行体方法所属的 方法

第三个参数:线程执行体方法所属的实参

*/

NSNumber *n = @50;

NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(creatThreadTwo:) object:n];

//设置线程的名字

t.name = @"线程B";

// [t setName:@"线程B"];

//这种方式创建的线程,需要手动启动线程

[t start];

2> 第二种方式

detachNewThreadSelector:@selector(SEL) toTarget:target withObject:object

/**

*  @param SEL 线程执行体的方法

*  @param toTarge 线程执行体所属的对象

*  @param ithObject 线程执行体方法传递的实参

*

*/

NSNumber *n = @100;

// @one === [NSNumber numberWiuthInt:100];

//创建并启动一个线程

[NSThread detachNewThreadSelector:@selector(createOne:) toTarget:self withObject:n];

四,怎样取消线程,退出线程

线程退出3种情况

1> 线程的执行体执行结束

2> 线程的执行出错

3>手动退出线程

五,线程的优先级(线程执行顺序,影响执行频率)

优先级的值在0~1之间

默认0.5

值越大,线程执行的概率越高(并不是执行率越高)

六,线程锁

多线程在修改同一个资源时,会出现问题,解决这个问题的方法 通常是给线程加锁

线程加锁有三种方式

1>  @synchronized(self){代码块}

2> //加锁(必须初始化)

[_myLock lock];

代码块

//解锁

[_myLock unlock];

3> //加锁(必须初始化)

[_conditionLock lock];

代码块

//解锁

[_conditionLock unlock];

2.NSoperation

首先需要创建 NSOperationQueue  队列

一, NSInvocationOperation

initWithTarget:self selector:@selector(threadOne:) object:n

//添加到队列里

[queue addOperation:op1];

二, NSBlockOperation

+ (instancetype)blockOperationWithBlock:(void(^)(void)block;

三,自己实现

1> 首先继承与 NSOPeration 创建一个类,实现父类里面的main方法

2> 创建一个队列(NSoperationQueue对象),创建imageOperation 对象,添加到队列里面

day10 多线程二

一, block

二,GCD

//主线程所在的串行队列

//全局的并行队列

//自己创建的串行队列和并行队列

//异步和同步的方式创建线程

dispatch_async(dispatch_queue_t queue ,void (^block)(void));

dispatch_sync(dispatch_queue_t queue ,void (^block)(void));

时间: 2024-10-13 01:14:49

线程锁的相关文章

day9---多线程,线程锁,队列

进程.线程http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 使用threading模块实现多线程编程[综述]Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势. 在Python中我们主要是通过thread和 threading这两个模块来实现的,其中Python的threa

多线程篇八:线程锁

1.线程锁Lock/ReentrantLock package com.test.lock; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //线程锁,通常用于替换synchronized,比synchronized更加面向对象 public class LockTest { static class Outputer{ Lock locks=new Reentra

线程锁、线程池

一.线程(IO密集型工作多线程有用) 线程: 概述: 若一个文件从上到下顺序执行,则为串行执行,整个py文件实际上是一个主线程 若多线程,则可以并行执行,同一个时刻可以运行多个代码段 给每个client请求分配一个线程,则这些线程可以同时工作 多线程.多进程: 1.一个应用程序,可以有多进程和多线程:默认是单进程.单线程 2.单进程.多线程 : 多线程:IO操作(输入输出流,文件操作)有用,因为几乎不用cpu来调度,一般用多线程来提高并发 计算型操作,需要用到cpu调度执行,一般用多进程提高并发

线程系列08,实现线程锁的各种方式,使用lock,Montor,Mutex,Semaphore以及线程死锁

当涉及到多线程共享数据,需要数据同步的时候,就可以考虑使用线程锁了.本篇体验线程锁的各种用法以及线程死锁.主要包括: ※ 使用lock处理数据同步※ 使用Monitor.Enter和Monitor.Exit处理数据同步※ 使用Mutex处理进程间数据同步※ 使用Semaphore处理数据同步※ 线程死锁 □ 使用lock处理数据同步 假设有一个类,主要用来计算该类2个字段的商,在计算商的方法之内让被除数自减,即被除数有可能为零.使用lock语句块保证每次只有一个线程进入该方法. class Th

Android多线程研究(9)——线程锁Lock

在前面我们在解决线程同步问题的时候使用了synchronized关键字,今天我们来看看Java 5.0以后提供的线程锁Lock. Lock接口的实现类提供了比使用synchronized关键字更加灵活和广泛的锁定对象操作,而且是以面向对象的方式进行对象加锁. @Override public void run() { while(true){ Lock lock = new ReentrantLock(); try { lock.lock(); Thread.sleep(new Random()

多线程操作数据拷贝要加线程锁

debug三天之后,在今天终于发现了自己开的两个线程(一个接收数据,一个处理数据)所处理的数据并不相等.用compare比较后发现数据有所偏差,处理线程的数据存成文件之后隔一段都要比接收线程少一点.少的频率跟线程之间的切换次数又有关系,这就让人直接怀疑是不是内存拷贝发生了错误,结果查了所有的语句都没发现问题,最后突然想到多线程在数据拷贝的过程中一旦遇到线程切换会导致不确定的因素发生,于是在线程拷贝数据的地方加上线程锁,bug解决!多线程操作数据拷贝要加线程锁,布布扣,bubuko.com

【java并发】线程锁技术的使用

线程锁好比传统线程模型中的synchronized技术,但是比sychronized方式更加面向对象,与生活中的锁类似,锁本身也应该是个对象.两个线程执行的代码片段如果要实现同步互斥的效果,它们必须用同一个锁对象.锁是上在代表要操作的资源的类的内部方法中,而不是线程代码中.这一篇博文主要总结一下线程锁技术中Lock锁.ReadWriteLock锁的使用. 1. Lock的简单使用 有了synchronized的基础,Lock就比较简单了,首先看一个实例: public class LockTes

linux线程锁的迷思

http://www.ibm.com/developerworks/cn/linux/thread/posix_thread3/#1 当多线程想要等待某一条件成立时,用pthread_cond_wait来阻塞线程, 首先明确wait的作用,pthread的wait与lock都可以阻塞线程等待"条件"成立,区别在于: wait之后的发送来的条件成立(pthread_cond_broadcast())才有效,之前发生都被丢弃了,也就是说wait的首次调用肯定会阻塞线程,不会因条件成立过而向

13 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件  queue队列 生产者消费者模型 Queue队列 开发一个线程池

本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把