死锁-06-多线程

 1 //
 2 //  ViewController.m
 3 //  07-死锁
 4 //
 5 //  Created by mac on 16/4/20.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10
11 @interface ViewController ()
12
13 @end
14
15 @implementation ViewController {
16
17     NSObject *_zhangsan;
18     NSObject *_lisi;
19 }
20
21 - (void)viewDidLoad {
22     [super viewDidLoad];
23
24     [self addThread];
25 }
26 /**
27  *  创建(wbvf)线程
28  */
29 - (void)addThread {
30
31     _zhangsan = [[NSObject alloc] init];
32     _lisi = [[NSObject alloc] init];
33
34     //线程1
35     [NSThread detachNewThreadSelector:@selector(threadAction) toTarget:self withObject:nil];
36
37     //线程2
38     [NSThread detachNewThreadSelector:@selector(threadAction2) toTarget:self withObject:nil];
39 }
40 - (void)threadAction {
41
42     //对象级别锁,传递的object作为该锁的唯一标识,只有当标识相同时,才满足互斥条件,另一个线程会阻塞。
43     @synchronized(_zhangsan) {
44
45         NSLog(@"===zhangge");
46         [NSThread sleepForTimeInterval:1];
47
48         //尽量不要在一个线程中加多把锁
49 //        @synchronized(_lisi) {
50             NSLog(@"=== lige");
51 //        }
52     }
53 }
54 - (void)threadAction2 {
55
56     @synchronized(_lisi) {
57
58         NSLog(@"lige===");
59         [NSThread sleepForTimeInterval:1];
60
61         @synchronized(_zhangsan) {
62             NSLog(@"zhangge===");
63         }
64     }
65
66 }
67 @end

死锁示例如上

时间: 2024-10-12 21:47:04

死锁-06-多线程的相关文章

话说多线程

(十)话说多线程关键字: java 面试题 多线程 thread 线程池 synchronized 死锁作者:臧圩人(zangweiren) 发布时间:2008-08-08网址:http://zangweiren.javaeye.com>>>转载请注明出处!<<<线程或者说多线程,是我们处理多任务的强大工具.线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享:而线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同

关于多线程一二

注:本人初学菜鸟,今天同学讲了多线程,把自己理解的总结分享一下,敬礼~ 首先说一下java多线程的概念和原理 一张原理图分析图送给大家,画的丑不要计较 注意:对Java来说,run()方法没有任何特别之处.像main()方法一样,它只是新线程知道调用的方法名称(和签名).因此,在Runnable上或者Thread上调用run方法是合法的.但并不启动新的线程. 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式.进程是指一个内存中运行的应用程序,每个进程都

黑马程序员——总结——多线程——改1

多线程 一.线程的概念 线程时程序执行的控制单元,一个进程必须有一个以上的线程:多线程并发执行可以提高程序的效率,起到同时执行的效果! 比如:电脑同时执行qq,迅雷:迅雷启动多个线程下载多个文件:窗口卖票 二.开启线程的方法 两种创建线程的方法:Extends Thread和implements Runnable (1).继承方法  a,定义类继承Thread. b,复写Thread中的run方法. 目的:将自定义代码存储在run方法中,让线程运行. c,创建定义类的实例对象.相当于创建一个线程

用GCD创建多线程

GCD是苹果推荐的多线程方案,通常应用的场景是当程序需要做复杂的耗时的计算或操作的时候.比如发送网络请求,下载大图片等等.如果将这些都交由主线程来执行,那么主线程将无法响应用户的界面操作,非常影响用户体验. 这时候,将这些耗时任务交给子线程,就变成非常必要.GCD则是一套由C语言写的库. - (void)viewDidLoad { [super viewDidLoad]; NSAssert(_image, @"Image not set; required to use view control

C#中的多线程 - 同步基础

原文:http://www.albahari.com/threading/part2.aspx 1同步概要 在第 1 部分:基础知识中,我们描述了如何在线程上启动任务.配置线程以及双向传递数据.同时也说明了局部变量对于线程来说是私有的,以及引用是如何在线程之间共享,允许其通过公共字段进行通信. 下一步是同步(synchronization):为期望的结果协调线程的行为.当多个线程访问同一个数据时,同步尤其重要,但是这是一件非常容易搞砸的事情. 同步构造可以分为以下四类: 简单的阻塞方法 这些方法

多线程的简单了解

1.程序.进程.线程 程序:程序是存放在磁盘上的一系列代码和数据 进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.每个程序启动后都会有一个进程 线程:它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程.但线程不能单独执行,必须组成进程,一个进程至少有一个主线程 主线程:当我们应用程序刚刚运行的时候,系统会自动为我们开放一个

C++11线程指南(七)--死锁

1. 死锁 在多个mutex存在的时候,可能就会产生死锁. 避免死锁的一个最通用的方法是,总是按照相同的顺序来lock the two mutexes, 即总是先于mutex B之前lock mutex A,这样就不会有死锁的可能.有时,这种方法很简单实用,当这些mutexes用于不同的目标.但是,当mutexes用于包含相同类的一个实例时,就不是那么容易了. 例如,如下面程序所示,相同类的两个实例之间交互数据.为了保证数据交互不换并发影响,两个实例都使用mutex进行保护.但是当mutex被嵌

多线程总结之旅(3):多线程的优缺点

说明:一个C#程序称为多线程的可以通过2种方式:明确地创建和运行多线程,或者使用.NET framework的暗中使用了多线程的特性——比如BackgroundWorker类, 线程池,threading timer,远程服务器,或Web Services或ASP.NET程序.在后面的情况,人们别无选择,必须使用多线程:一个单线程的ASP.NET web server不是太酷,即使有这样的事情:幸运的是,应用服务器中多线程是相当普遍的:唯一值得关心的是提供适当锁机制的静态变量问题. 一.多线程的

C#中的多线程 - 同步基础 z

原文:http://www.albahari.com/threading/part2.aspx 专题:C#中的多线程 1同步概要Permalink 在第 1 部分:基础知识中,我们描述了如何在线程上启动任务.配置线程以及双向传递数据.同时也说明了局部变量对于线程来说是私有的,以及引用是如何在线程之间共享,允许其通过公共字段进行通信. 下一步是同步(synchronization):为期望的结果协调线程的行为.当多个线程访问同一个数据时,同步尤其重要,但是这是一件非常容易搞砸的事情. 同步构造可以

Java - HashMap 多线程安全解析

HashMap多线程并发问题分析 多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法上了,重启程序后问题消失.但是过段时间又会来.而且,这个问题在测试环境里可能很难重现. 我们简单的看一下我们自己的代码,我们就知道HashMa