多线程

多线程 NSThread 了解

早过忘川 提交于 2020-03-20 02:04:37
用NSThread创建子线程的3种方法 // DYFViewController.m // 623-02-pthread // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" #import <pthread.h> @interface DYFViewController () @end @implementation DYFViewController //// c语言函数 //void *run(void *data) //{ // // 1.获取当前的线程 // NSThread *cThread = [NSThread currentThread]; // // // 2.打印线程 // NSLog(@"%@", cThread); // // // 3.h耗时操作 // for (int i = 0; i < 9999; i++) { // NSLog(@"%@", cThread); // } // // return NULL; //} - ( IBAction )btnOnClick { // 1.获取当前的线程 NSThread *cthread = [

IOS开发之多线程NSThread

倾然丶 夕夏残阳落幕 提交于 2020-03-20 01:57:17
一、什么是多线程 NSThread是轻量级的多线程开发,使用并不复杂,但使用NSThread需要自己管理线程的生命周期,这篇文章主要讲NSThread的使用 了解进程与线程 1. 线程是CPU执行任务的基本单位,一个进程能有多个线程,但同时只能执行一个任务 2. 进程就是运行中的软件,是动态的 3. 一个操作系统可以对应多个进程,一个进程可以有多条线程,但至少有一个线程 4. 同一个进程内的线程共享进程里的资源 2. 主线程 1. 进程一启动就自动创建 2. 显示和刷新UI界面 3. 处理UI事件 3. 子线程 1. 处理耗时的操作 2. 子线程不能用来刷新UI NSThread常用方法 使用NSThread开辟线程的两种方式: 创建并手动开启线程 NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(compete) object:nil]; [thread start]; 创建并自动开启线程 [NSThread detachNewThreadSelector:@selector(compete) toTarget:self withObject:nil]; 判断当前进程是否是多线程 BOOL isMultiThread = [NSThread isMultiThreaded];

iOS-NSThread多线程

*爱你&永不变心* 提交于 2020-03-20 01:52:35
NSThread 一、创建和启动线程 一个NSThread对象就代表一条线程 创建方法一: 优点:可以对线程进行更多的设置 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 //设置名字 - (void)setName:(NSString *)n; - (NSString *)name; 创建方法二 创建线程后自动启动线程 [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; 或者 //隐式创建并启动线程 [self performSelectorInBackground:@selector(run) withObject:nil]; 上述2种创建线程方式的优缺点 + 优点:简单快捷,不用手动调用start方法, 系统会自动启动 + 缺点:无法对线程进行更详细的设置 二、相关使用方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMainThread; // 是否为主线程 +

Java多线程深入理解

眉间皱痕 提交于 2020-03-19 09:15:06
在 java中要想实现多线程,有两种手段,一种是继续 Thread类,另外一种是实现 Runable接口。 对于直接继承 Thread的类来说,代码大致框架是: class 类名 extends Thread{ 方法1; 方法2; … public void run(){ // other code… } 属性1; 属性2; … } 先看一个简单的例子: /** * @author Hashsound 继承Thread类,直接调用run方法 * */ class hello extends Thread { private String name; public hello() { } public hello(String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + "运行 " + i); } } public static void main(String[] args) { hello h1 = new hello("A"); hello h2 = new hello("B"); h1.run(); h2.run(); } } 【运行结果】: A运行 0 A运行 1 A运行 2 A运行 3 A运行 4 B运行 0

多线程

一曲冷凌霜 提交于 2020-03-19 01:34:33
多线程 进程:进程指正在运行的程序 线程:是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个线程中是可以有多个线程的,这个应用程序也可以被称为多线程程序。 一个程序运行后至少有一个进程,一个进程中可以包含多个线程 举例: 单线程程序:即,若有多个任务只能依次执行。当上一个任务执行结束后,下一个任务开始执行。 如,去网吧上网,网吧只能让一个人上网,当这个人下机后,下一个人才能上网。 多线程程序:即,若有多个任务可以同时执行。如,去网吧上网,网吧能够让多个人同时上网。 程序运行原理 分时调度 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。 抢占式调度 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。   主线程 代码演示: 1 class Demo{ 2 String name; 3 Demo(String name){ 4 this.name = name; 5 } 6 void show() { 7 for (int i=1;i<=10000 ;i++ ) { 8 System.out.println("name="+name+",i="+i); 9 } 10 } 11 } 12 13 class ThreadDemo { 14 public static

并发编程之多线程

主宰稳场 提交于 2020-03-18 22:51:00
一,什么是线程   在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程   线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于cpu),而一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一条流水线。   所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。   多线程(即多个控制线程)的概念是,在一个进程中存在多个线程,多个线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路拉。 二,线程和进程的区别 Threads share the address space of the process that created it; processes have their own address space. Threads have direct access to the data segment of its process; processes have their own copy of the data segment of the parent

1.python进程、线程、多线程

无人久伴 提交于 2020-03-18 22:01:05
2018-07-16 1. 进程 简单理解 :进程就是一段程序执行的过程。 广义理解 :进程就是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 进程是 cpu调度 和分配的基本的分配单元,也是基本的执行单元。 进程的状态: 就绪 : 获取cpu外的所有资源,只要分配资源就可以马上执行。        运行 : 获得了分配的资源,程序开始执行。        阻塞 : 条件不满足时,等待满足时才执行。 一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态。 1.就绪→执行 处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。 2. 执行→就绪 处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。 3. 执行→阻塞 正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。 4. 阻塞→就绪 处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。 2. 线程 理解:一个进程可以包含若干个进程,一个进程至少有一个线程。线程可以利用进程所拥有的资源,在引入线程的操作系统中,把进程作为分配资源的基本单位,线程作为独立运行和调度的基本单位,相比进程而言线程调度资源消耗小

阿里架构强势分享:编写高质量代码改善Java程序的151个建议!

拜拜、爱过 提交于 2020-03-18 17:47:51
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 引言 您是否曾经为了提供一个“One Line”的解决方案而彻夜地查看源代码?现在您不用了。 您是否曾经为了理解某个算法而冥思苦想、阅览群书?现在您不用了。 您是否曾经为了提升0.1秒的性能而对N种实现方案进行严格测试和对比?现在您不用了。 您是否曾经为了避免多线程死锁问题而遍寻高手共同诊治?现在您不用了。 ……在学习和使用Java的过程中您是否在原本可以很快掌握或解决的问题上耗费了大量的时间和精力?也许您现在不用了,本书的很多内容都是我用曾经付出的代价换来的,希望它能帮助您少走弯路! 那些所谓的架构师、设计师、项目经理、分析师们,已经有多长时间没有写过代码了?代码是一切的基石,我不太信任连“Hello World”都没有写过的架构师。看看我们软件界的先辈们吧,Dennis M.Ritchie决定创造一门“看上去很好”的语言时,如果只是站在高处呐喊,这门语言是划时代的,它有多么优秀,但不去实现,又有何用呢?没有DennisM.Ritchie的亲自编码实现,C语言不可能诞生

多线程 -- CAS自旋锁、Atomic类

廉价感情. 提交于 2020-03-18 17:01:03
1、CAS(compare and swap) CAS 概念: CAS是一种系统原语,能够原子地完成比较和交换两个动作(所谓原语属于操作系统用语范畴。原语由若干条指令组成的,用于完成一定功能的一个过程。primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断)。CAS是Compare And Set的缩写。CAS有3个操作数,内存值V,旧的预期值E,要修改的新值N。当且仅当预期值E和内存值V相同时,将内存值V修改为B,否则什么都不做。 CAS 执行流程图: 2、自旋锁 (spinlock) 前言: 在介绍自旋锁之前,需要提到关键字 Volatile,它可以保证 JMM 模型所规定的可见性+有序性,但是它却不能保证原子性,即如果用它是不能保证对修饰变量操作的原子性的。因此不能用它来作为锁,但是它配合上 CAS 就可以构造出一种“无锁策略”的乐观自旋锁,保证了操作的原子性,而且在适合其应用的场景下效率是比较高的,因为它的优点就是可以避免线程的上下文切换所带来的系统开销。 概念: 是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 自旋锁缺点: 1)如果某个线程持有锁的时间过长

Java学习笔记4(多线程)

孤者浪人 提交于 2020-03-17 22:55:28
多线程 多个程序块同时运行的现象被称作 并发执行 。多线程就是指一个应用程序中有多条并发执行的线索,每条线索都被称作一条 线程 ,它们会交替执行,彼此间可以进行通信。 进程: 在一个操作系统中,每个独立执行的程序都可称作为一个进程,也就是 “正在运行的程序”。在计算机中,所有的程序都是由CPU执行的,CPU在某个时间点只能执行一个进程,在极短的时间下在不同的进程之间进行切换,给人程序在同时进行的感觉。 线程: 每个运行的程序都是一个进程,在一个进程中可以有多个执行单元同时运行,这些执行单元可以看作程序执行的一条条线索,被称为线程。多条线程看似同时执行,其实不然,它和进程一样,都是 CPU轮流执行的。 继承 Thread类创建多线程 通过继承 Thread类,并重写Thread类中的run()方法便可以实现多线程,在Thread类中提供了start()方法用于启动新线程。 class MyThread extends Thread{ //重写run()方法 public void run(){ while(true){ System.out.println("MyThread类的run()方法在运行"); } } } public class Test{ public static void main(String[] args) { MyThread myThread = new