zoukankan      html  css  js  c++  java
  • 多线程中并发数与挂起

    1.设置最大并发数量:通过设置maxConcurrentOperationCount属性来设置,默认值是-1,不限制最大并发数量.

    2.队列的挂起:设置属性suspended为YES,即可将队列挂起,也可以称为暂停

    注意:

    1).当前任务处于执行状态,设置队列挂起不会影响其执行,受影响的是那些还没有执行的任务

    2).当队列设置为挂起状态后,可以通过修改其状态再次恢复任务

    3.队列的取消

    方法:-(void)cancelAllOperations,当取消任务后,任务不可恢复

    注意:若任务操作时自定义NSOperation类型的话,执行完一个耗时操作后,需要加一是否取消任务的判断,再去执行另外一个耗时操作

    -(void)main

    {

        for (int i = 0; i < 5000; i++) {

            NSLog(@"--1--%@",[NSThread currentThread]);

        }

        if (self.cancelled) {

            return;

        }

        for (int i = 0; i < 5000; i++) {

            NSLog(@"--2--%@",[NSThread currentThread]);

        }

        if (self.cancelled) {

            return;

        }

        for (int i = 0; i < 5000; i++) {

            NSLog(@"--3--%@",[NSThread currentThread]);

        }

        if (self.cancelled) {

            return;

        }

        for (int i = 0; i < 5000; i++) {

            NSLog(@"--4--%@",[NSThread currentThread]);

        }

    }

    //最大并发数量

    -(void)concurrentCount

    {

        self.queue = [[NSOperationQueue alloc]init];

        self.queue.maxConcurrentOperationCount = 1;

        [self.queue addOperationWithBlock:^{

            for (int i = 0; i < 5000; i++) {

                NSLog(@"--1--%@",[NSThread currentThread]);

            }

        }];

        [self.queue addOperationWithBlock:^{

            for (int i = 0; i < 5000; i++) {

                NSLog(@"--2--%@",[NSThread currentThread]);

            }

        }];

        [self.queue addOperationWithBlock:^{

            for (int i = 0; i < 5000; i++) {

                NSLog(@"--3--%@",[NSThread currentThread]);

            }

        }];

        [self.queue addOperationWithBlock:^{

            for (int i = 0; i < 5000; i++) {

                NSLog(@"--4--%@",[NSThread currentThread]);

            }

        }];

    }

    //挂起与取消

    -(void)suspendedAndCancel

    {

        //挂起和恢复

        if (self.queue.suspended) {

            [self.queue setSuspended:NO];

        }else{

            [self.queue setSuspended:YES];

        }

        

        //取消

    //    [self.queue cancelAllOperations];

    }

  • 相关阅读:
    apache mina框架
    架构学习笔记
    接口抽象类
    继承是共用,不是复制
    线程安全的单例模式还需要对成员变量的set get方法设置锁么
    受检查异常要求try catch,new对象时,就会在堆中创建内存空间,创建的空间包括各个成员变量类型所占用的内存空间
    myeclipse 写java代码提示 dead code 原因
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.FileUtils
    android内存优化发展——使用软引用
    cocos2dx3.1.1+cocosstudio+lua问题总结
  • 原文地址:https://www.cnblogs.com/PJXWang/p/5951837.html
Copyright © 2011-2022 走看看