Operation(自定义多线程)

//

//  ViewController.m

//  UI-NO-25

//

//  Created by Bruce on 15/8/27.

//  Copyright (c) 2015年 Bruce. All rights reserved.

//

 

#import "ViewController.h"

 

@interface ViewController ()

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    

//    不能直接使用Operation  是因为 它里面 没有可以直接操作的方法  只是一个基类(抽象类)

    NSInvocationOperation *invocation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation"];

//    如果单独使用Operation 必须手动启动

//    [invocation start];

//    Operation 默认在当前线程 去执行(同步执行)

    

    NSInvocationOperation *invocation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation1"];

    //    如果单独使用Operation 必须手动启动

    

    NSInvocationOperation *invocation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation2"];

    

    NSInvocationOperation *invocation3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation3"];

    

    NSInvocationOperation *invocation4 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation4"];

    

//    *****NSOperationQueue不用手动去启动线程 所以注释掉start

    

//    [invocation1 start];

//    Operation 默认在当前线程 去执行(同步执行)

    

    

    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

//        具体执行的方法

        [self act:@"blockOperation"];

    }];

    

//    添加操作

//    NSBlockOperation 的操作数大于1的时候  会开辟线程执行

    [blockOperation addExecutionBlock:^{

        [self act:@"blockOperation2"];

    }];

    

    

//    [blockOperation start];

//    Operation 默认在当前线程 去执行(同步执行)

    

    

// NSOperationQueue(线程队列) 管理线程 (默认会开辟线程去执行)

//    *****NSOperationQueue不用手动去启动线程

//    异步执行

    NSOperationQueue *queue = [[NSOperationQueue alloc]init];

//    设置 线程队列的 最大并发数 (最多可以允许几个操作 同时执行)

    queue.maxConcurrentOperationCount = 1;

    [queue addOperation:invocation];

    [queue addOperation:invocation1];

    [queue addOperation:invocation2];

    [queue addOperation:invocation3];

    [queue addOperation:invocation4];

    [queue addOperation:blockOperation];

    

}

 

- (void)act:(id)sender

{

    NSLog(@"%@\n%@",[NSThread currentThread],sender);

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

 

时间: 2024-08-05 06:23:09

Operation(自定义多线程)的相关文章

Spring事务与自定义多线程陷阱

场景:Spring+Ibatis环境,使用spring aop事务(配置到service层),在一个service方法中,自定义了一个多线程,结果事务不起作用了,不用线程,则事务有效. 原因:Spring的事务是通过ThreadLocal来保证线程安全的,事务和当前线程绑定,所以自己开了多线程自然会让事务失效. Spring的事务管理器是通过ThreadLocal来保存每个线程的副本,从而实现线程安全的,再结合IoC和Aop实现高级声明式事务的功能,所以Spring的事务天然地和线程有着千丝万缕

spring定时任务.线程池,自定义多线程配置

定时任务及多线程配置xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springfra

线程——自定义多线程task

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp7 { public class TaskManage { public int maxcount; public int countnum = 0; public TaskMan

java 22 - 7 多线程之控制线程的方法

线程休眠(让线程休息一会再运行) public static void sleep(long millis) 在自定义线程类中添加该方法. 更改后,运行测试类,结果就是每执行完一轮,就休息1秒(这里设置的是休眠1秒),再进行一轮. 一轮:(如果测试类调用了3个线程,那么就是随机运行3次为一轮) 如: 哈士奇:1,日期:Wed Oct 05 21:01:19 CST 2016 短尾猫:1,日期:Wed Oct 05 21:01:19 CST 2016 萨摩耶:1,日期:Wed Oct 05 21:

java 22 - 12 多线程之解决线程安全问题的实现方式1

从上一章知道了多线程存在着线程安全问题,那么,如何解决线程安全问题呢? 导致出现问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 上一章的程序,上面那3条都具备,所以肯定出问题. 如何解决问题: 原因A.B肯定不能改变,所以只能改变原因C 解决问题思路: 如果把多条语句操作共享数据的代码给包成一个整体,让某个线程在执行这个整体的时候,别的线程不能执行. 这时候就用到了java提供的:同步机制 同步代码块: synchronized(对象){  需要同步的代码

Java中多线程的学习和使用(一)概述及创建方式

转载请注明http://www.cnblogs.com/devtrees/p/4395477.html 多线程的学习 一.多线程概述 (一).进程与线程 在说多线程或者线程之前,让我们来了解一下更显而易见的进程概念.那什么是进程呢? 进程就是正在进行中的程序. Windows操作系统中在任务栏处右击,弹出的菜单中可看见任务管理器,打开它,就可以看见当前运行的程序和进程列表. 进程:是一个正在执行中的程序. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程

ios 多线程记录

这里打算零碎记录下多线程相关内容 1. AFNetworking中使用一个子线程处理所有的网络请求,原因很简单,一个runloop就是基于kqueue,多路复用 2. NSOperation基于GCD,可以实现线程数控制.依赖管理.取消:线程数控制倒不是问题,依赖管理也可以在GCD上实现,取消功能我倒不知道怎么实现,有个问题就是如果NSOperation执行中是否可以取消?这个似乎不行,不仅是涉及到内存的数据,可能还有网络请求.文件处理:还有发出的各类通知.数据交换等,这个应该是不能取消:那么这

Java JDK版本(2) - JDK7 新特性

http://www.ibm.com/developerworks/cn/java/j-lo-jdk7-1/ JSR292:支持动态类型语言(InvokeDynamic) 近年来越来越多的基于 JVM 的动态语言的出现,对于 JVM 提出了新的需求和挑战.其实在 JDK6 中就已经支持 JSR223:Java 平台上的脚本语言,通过一个脚本语言引擎在 JVM 上执行 JavaScript 等脚本语言.但由于 JVM 本身的设计原来是针对 Java 这种静态类型语言的,所以脚本语言无论是解释执行,

【IOS笔记】Resource Management in View Controllers

Resource Management in View Controllers 视图控制器的资源管理 View controllers are an essential part of managing your app’s resources. View controllers allow you to break your app up into multiple parts and instantiate only the parts that are needed. But more t