日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin进行异步操作

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin进行异步操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

我(原作者)最近開始閱讀G. Blake Meike的“Android Concurrency”,到目前為止,我可以強烈推薦這本偉大的書:它包含了很多洞察如何各種Android并發機制的工作,何時喜歡一種方法,以及如何獲得最好的工具,在您的處置。我決定遵循代碼示例,并在我的電腦上重新創建它們,并且由于我非常愛Kotlin,我認為這將是一個好主意,將示例轉換為Kotlin在旅途中。當我開始重寫Kotlin中的代碼示例時,我非常驚訝地發現:
Kotlin中沒有synchronized關鍵字
Kotlin中沒有volatile關鍵字
Kotlin的Any類似于Java的Object,沒有wait(),notify()和notifyAll()方法
那么并發如何在Kotlin中工作呢?這個問題已經在Kotlin論壇上提出,這里是來自Andrey Breslav,Kotlin項目負責人的回答:
Kotlin故意沒有內置并發語言的構造。我們認為這應該由圖書館來處理。
雖然Kotlin沒有這些東西內置的語言,它仍然提供了一堆低級并發工具。讓我們來看看商店里有什么。

?

創建線程

有兩種方法在Java中創建線程:擴展Thread類,或者實例化它并通過構造函數傳遞一個Runnable。 因為你可以很容易地在Kotlin中使用Java類,這兩個解決方案都很好。 這里是你如何子類Thread:

object : Thread() { override fun run() {println("running from Thread: ${Thread.currentThread()}")} }.start()

此代碼使用Kotlin的對象表達式創建一個匿名類并覆蓋run()方法。 下面是如何將一個Runnable傳遞給一個新創建的Thread實例:

Thread({ println("running from lambda: ${Thread.currentThread()}") }).start()

你在這里看不到Runnable:在Kotlin中,它可以很容易地替換為lambda表達式。 有更好的方法嗎? 當然! 以下是如何實例化和啟動線程Kotlin風格:

thread(start = true) { println("running from thread(): ${Thread.currentThread()}") }

整潔,不是嗎? 我們正在使用thread()函數,它神奇地隱藏所有的樣板代碼。 事實上,thread()中沒有魔法:

public fun thread(start: Boolean = true, isDaemon: Boolean = false, contextClassLoader: ClassLoader? = null, name: String? = null, priority: Int = -1, block: () -> Unit): Thread { val thread = object : Thread() {public override fun run() {block()}}if (isDaemon)thread.isDaemon = trueif (priority > 0)thread.priority = priorityif (name != null)thread.name = nameif (contextClassLoader != null)thread.contextClassLoader = contextClassLoaderif (start)thread.start()return thread

這只是一個非常方便的包裝函數,是一個快樂使用。

同步方法和塊

synchronized不是Kotlin中的關鍵字,它替換為@Synchronizedannotation。 Kotlin中的同步方法的聲明將如下所示:

ps:我是不太明白Kotlin開發團隊的用意,把原來Java中的注解@Override變成了override關鍵字;又把synchronized關鍵字變成了注解@Synchronizedannotation;我只想說? what are you 弄啥嘞!?!

@Synchronized fun synchronizedMethod() {println("inside a synchronized method: ${Thread.currentThread()}") }

注釋與Java的synchronized具有相同的效果:它會將JVM方法標記為同步。 對于同步塊,你必須使用synchronized()函數,它使用鎖作為參數:

fun methodWithSynchronizedBlock() { println("outside of a synchronized block: ${Thread.currentThread()}")synchronized(this) {println("inside a synchronized block: ${Thread.currentThread()}")} }

代碼看起來和行為非常類似于Java變體。

可變字段

同樣的故事,Kotlin沒有volatile關鍵字,但是有@Volatileannotation:

@Volatile private var running = falsefun start() { running = truethread(start = true) {while (running) {println("Still running: ${Thread.currentThread()}")}} }fun stop() { running = falseprintln("Stopped: ${Thread.currentThread()}") }

該行為類似于@Synchronized:@Volatile會將JVM備份字段標記為volatile。

wait(), notify() 和 notifyAll()

Kotlin中的每個類都繼承自Any,但Any不聲明wait(),notify()和notifyAll(),這意味著這些方法不能在Kotlin類上調用。 但是你仍然可以使用java.lang.Object的一個實例作為鎖,并調用它的方法。 這里是使用Object作為鎖的生產者/消費者問題的解決方案:

private val lock = java.lang.Object()fun produce() = synchronized(lock) { while (items >= maxItems) {lock.wait()}Thread.sleep(rand.nextInt(100).toLong())items++println("Produced, count is $items: ${Thread.currentThread()}")lock.notifyAll() }fun consume() = synchronized(lock) { while (items <= 0) {lock.wait()}Thread.sleep(rand.nextInt(100).toLong())items--println("Consumed, count is $items: ${Thread.currentThread()}")lock.notifyAll() }

它看起來很黑嗎? 好吧,是的。 真理是,如果你在代碼中依賴這樣的低級結構 - 很可能你做錯了。 現在有很多高級并發機制用于Java和Kotlin的每一個目的。 這里有一個偉大的Stackoverflow答案,提供了可用于在Kotlin中編寫并發代碼的工具列表。

本文的所有代碼示例都可以在GitHub上獲取。

?

結論

雖然它們不常使用,但了解和了解基本的并發工具仍然很重要。 結果,這些工作在Kotlin有點不同在Java,但所有主要機制都支持。 并記住,Kotlin與Java非常好地交互,所以如果Kotlin對應的方法丟失,你可以依靠Java類。 玩的開心!

原文鏈接:https://blog.csdn.net/sergeycao/article/details/53894787?

原文是譯文,我就直接轉過來了,有的詞用的不像是正常的用語,可能部分是機器翻譯的,能看懂就行了,懶得改了

總結

以上是生活随笔為你收集整理的Kotlin进行异步操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品一二区 | 美女扒开让男人桶爽 | 国内精品视频在线 | 国产精品一区二区三区四区五区 | www.狠狠爱| 免费小视频在线观看 | 不卡的毛片 | 伊人网大 | 欧美你懂得 | 亚洲av成人片无码 | 欧美精品乱人伦久久久久久 | 蜜桃av噜噜一区二区三区网址 | 午夜免费网站 | 成人小视频免费看 | 91日韩中文字幕 | 性调教学院高h学校 | 熟女俱乐部一区二区 | 久久永久视频 | 日日拍夜夜拍 | 亚洲最大成人综合网 | 日本老妇性生活 | 亚洲AV无码成人国产精品色 | 国产男女视频 | 91成人在线视频 | 亚洲最大黄色网址 | 亚洲v国产v欧美v久久久久久 | 老头把女人躁得呻吟 | 欧美精品卡一卡二 | 中文字幕2区 | www国产91 | 亚洲v在线 | 亚洲激情在线视频 | 污污视频免费看 | 中文字幕无码精品亚洲 | 中文字幕无码精品亚洲35 | 亚洲1234区| 天天艹夜夜艹 | 噜噜色av | 成年人看片网站 | 黄色av视屏| 蜜臀视频在线观看 | 亚洲免费一 | 免费在线观看日韩av | 久久成人乱码欧美精品一区二区 | 亚洲最大在线视频 | 日日干日日草 | 久久亚洲av无码西西人体 | 久久久久久久蜜桃 | 欧美激情亚洲综合 | 精品国产18久久久久久 | 日韩欧美在线观看免费 | 日本人妻熟妇久久久久久 | 亚洲成人毛片 | 日本久久高清 | 成人在线视频一区二区 | 天天拍夜夜拍 | 久久奇米 | 美女隐私无遮挡免费 | 加勒比久久综合 | 欧美黑人精品一区二区 | 久久综合色网 | 韩国短剧在线观看 | 日本免费精品 | 免费午夜网站 | 免费看aaaaa级少淫片 | 能在线观看的av | 97av在线播放 | 亚洲成人网页 | 国产精品s色 | 久久视频这里只有精品 | 中文字幕av影视 | 精品国产一区二区三区久久 | 在线黄色观看 | 91精品国产高清一区二区三蜜臀 | 亚洲美女屁股眼交3 | 日韩一级黄色片 | 国产日韩精品一区二区 | 五月婷婷丁香综合 | 日本一级淫片色费放 | 污视频在线播放 | 在线观看亚洲免费视频 | 日本福利一区二区 | 韩国av一区二区三区 | 亚洲视频在线播放免费 | www.777色| 亚洲av无码成人精品国产 | 日韩aa视频 | 不卡视频免费在线观看 | 欧美三级韩国三级日本三斤在线观看 | 韩国av毛片 | 亚洲欧美一级 | 中文字幕日韩欧美在线 | 男生桶女生肌肌 | 亚洲黄色在线播放 | 欧美偷拍一区二区 | 国产三级视频 | 一区二区有码 | 欧美四级在线观看 | 久久婷婷综合色丁香五月 |