Kotlin入门之异步和并发

多线程的设计,在遇到需要多个执行IO操作的时候,多个线程的阻塞,造成了效率的下降,这个时候异步就是不错的选择了。

注意:下面许多操作都是新的库,比旧的版本可能没有。

  1. 异步
  • 协程
    示例:
fun main(args:Array<String>) {
//创建异步操作
   val job = launch(
           search()
   )
    println("Hello, ")
    //等待job执行结束,程序结束
    job.join()
   }
suspend fun search(){
//delay只能在协程内部或者suspend函数中执行
    delay(1000L)
    println("World!")
}
  • 同步方式写异步代码
    实例:
fun main(args:Array<String>)= runBlocking<Unit>{
    val one = async{ searchItemOne() }
    val two = async{ searchItemTwo() }
    println("The item is ${one.await()} and ${two.await()}")
}
  1. 并发
    使用@Synchronized保证整个函数或者synchronized()保证一部分代码块。
class Shop{
    val goods = hashMapOf<Long, Int>()
    init {
        goods.put(1, 10)
        goods.put(2, 15)
    }
    @Synchronized fun buyGoods(id: Long){
        val stock = goods.getValue(id)
        goods.put(id, stock - 1)
    }
    fun buyGoods2(id: Long){
        synchronized(this){
            val stock  = goods.getValue(id)
            goods.put(id, stock - 1)
        }
    }
}

另外,Kotlin中的Akka也是基于Actor的不错的选择。

  • Akka
    Akka共享内存的设计理念和传统不同,Actor模型提倡的是:通过通信来实现共享内存,而不是共享内存来实现通信。
    原则:
  1. 消息的发送必须先于消息的接收。
  2. 同一个Actor对一条消息的处理先于对于下一条消息的处理。
    示例:
import akka.actor.ActorRef
import akka.actor.ActorSystem
import akka.actor.Props
import akka.actor.UntypedAbstractActor
import akka.pattern.Patterns
import akka.util.Timeout
import scala.concurrent.Await
import scala.concurrent.duration.Duration
import java.util.*
class ShopActor(val stocks:HashMap<Long, Int>):UntypedAbstractActor(){
	var orderNumber = 1L
	override fun onReceive(message: Any?){
		when(message){
			is Action.Buy -> {
				val stock  = stock.getValue(message.id)
				if(stock > message.amount){
					stocks.plus(Pair(message.id, stock - message.amount))
					sender.tell(orderNumber, self)
					orderNumber++
				} else {
					sender.tell("low stock", self)
				}
			}
			is Action.GetStock -> {
				sender.tell(stocks.get(message.id), self)
			}
		}
	}
}
sealed class Action{
	data class BuyOrInit(...):Action()//参数省略
	data class Buy(val id:Long, val userId:Long, val amount:Long):Action()
	data class GetStock(val id:Long):Action()
	data class GetStockOrInit(....)
}
class ManageActor: UntypedAbstractActor(){
	override fun onReceive(message: Any?){
		when(message){
			is Action.BuyOrInit -> getOrInit(message.shopName, message.stocks).forward(Action.Buy(message.id, message.userId, message.amount), context)
			is Action.GetStockOrInit -> getOrInit(message.shopName,message.stocks).forward(Action.GetStock(message.id), context)
			}
		}
		fun getOrInit(shopName:String, stocks:Map<Long, Int>:ActorRef{
		return context.findChild("shop-actor-${shopName}").orElseGet{context.actorOf(Props.create(ShopActor::class.java, stocks), "shop-actor-${shopName}")}
	}
}
fun main(args:Array<String>){
	val stocksA = hashMapOf(Pair(1L, 10), Pair(2L, 5), Pair(3L, 20))
	val stockB =  hashMapOf(Pair(1L, 15), Pair(2L, 8), Pair(3L, 30))
	val actorSystem = ActorSystem.apply("shop-system")
	val manageActor = actorSystem.actorOf(Props.create(ManageActor::class.java),"manage-actor")
	val timeout = Timeout(Duration.create(3, "second")
	val resA = Patterns.ask(manageActor, Action.GetStockOrInit(1L, "A", stocksA), timeout)
	val stock = Await.result(resA, timeout.duration())
	println("the stock is ${stock}")
	val resB = Patterns.ask(manageActor, Action.BuyOrInit(2L, 1L, 1, "b", stocksB), timeout)
	val orderNumber = Await.result(resB, timeout.duration())
	println("the orderNumber is ${orderNumber}")
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来给你介绍一下 Android Studio 和 Kotlin。 Android Studio 是一款由 Google 开发的集成开发环境 (IDE),用于开发 Android 应用程序。它基于 IntelliJ IDEA,提供了丰富的功能和工具,可以帮助开发者更轻松地创建高质量的 Android 应用。 Kotlin 是一种静态类型的编程语言,由 JetBrains 开发。它是一种现代化的编程语言,可以与 Java 互操作,并且可以在 Android 开发中使用。Kotlin有很多优点,例如更简洁的语法、更少的代码和更高的可读性。 现在,让我们来看看如何入门 Android Studio 和 Kotlin。 1. 安装 Android Studio 你可以在官网下载 Android Studio 的最新版本。下载完成后,按照指示安装即可。 2. 创建新项目 打开 Android Studio,点击 Start a new Android Studio Project。然后按照提示创建一个新项目。在创建过程中,你可以选择使用 Kotlin 来编写代码。 3. 学习 Kotlin 基础语法 学习 Kotlin 的基础语法是非常重要的。你可以通过 Kotlin 官网上的教程来学习 Kotlin 的基础语法。 4. 编写代码 在 Android Studio 中,你可以创建不同类型的文件,例如布局文件、活动文件、Kotlin 文件等。在创建完毕后,你就可以开始编写代码了。 5. 调试应用程序 在 Android Studio 中,你可以使用调试工具来调试你的应用程序。在调试过程中,你可以检查变量、设置断点、单步执行等操作。 这些是入门 Android Studio 和 Kotlin 的基本步骤。希望这对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值