Kotlin GlobalScope 和 CoroutineScope

Kotlin 复制代码
package com.tiger.mykotlinapp.scope

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

fun main() {

    val  globalScope = GlobalScope
    globalScope.launch {
        delay(3000)
        println("hello")
    }

    globalScope.launch {
        delay(3000)
        println("hello")
    }

    //因为globalScope是整个应用程序的生命周期,不能在此手动取消它,调用抛异常 java.lang.IllegalStateException: Scope cannot be cancelled because it does not have a job
    globalScope.cancel()//不能手动取消它
    while (true);

}
Kotlin 复制代码
package com.tiger.mykotlinapp.scope

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

fun main() {

    val coroutineScope = CoroutineScope(Dispatchers.Default)
    coroutineScope.launch {
        delay(3000)
        println("hello")
    }
    coroutineScope.launch {
        delay(3000)
        println("hello")
    }
    //发现可以取消
    coroutineScope.cancel()
    while (true);

}

CoroutineScope和GlobalScope的区别

  1. 作用域不同,第一个作用域是activity,第二个是全局整个应用程序

2.第一个可以取消,第二个取消会抛异常

3.一般都是用第一个,更加灵活。

相关推荐
爱敲代码的小鱼7 小时前
springboot案例:
java·spring boot·后端
hashiqimiya8 小时前
spring框架springbean依赖及单一项目
java·前端·spring
sinat_255487818 小时前
FileReader/FileWriter
java·开发语言·jvm
历程里程碑8 小时前
37 线程安全单例模式深度解析
java·服务器·开发语言·前端·javascript·c++·排序算法
柒.梧.8 小时前
深入理解 HashMap 扩容流程:从 1.7 到 1.8 的演进与细节解析
java
皙然8 小时前
深入解析 Java 中的 final 关键字
java·开发语言·算法
东离与糖宝8 小时前
AI IDE冲击下,Java老项目如何平滑迁移到Cursor/AI编程工作流(完整迁移方案)
java·人工智能
刺客xs8 小时前
C++ 11新特性
java·开发语言·c++
SuperherRo8 小时前
JAVA攻防-Agent技术&JVM字节码&Premain启动加载&Agentmain运行附加&内存马应用
java·jvm·agent·内存马