在上次我們是通過了這種方式來創建了一個協程:
接着再來看另一種創建協程的方式:
下面用它來實現上一次程序一樣的效果,先來回顧一下上一次程序的代碼:
好,下面改用runBlocking的方式:
運行一下:
其它的代碼不用多解釋,重點是這塊:
好,對於咱們已經在用的協程相關的類下面來讀一讀它們官方的javadoc:
首先先來看一下它,先看下GlobalScope:
開讀:
看上面的代碼好親切,因為我是一個Android開發者~~不過目前還木有真實用Koltin編寫過Android項目,還在Kotlin的語法學習中,待學習好了Kotlin之后到時得想辦法用它來編寫個Android項目才行。
好,繼續再來分析一下lauch方法:
其中該方法用到了一個我們還木有學到的關鍵字:
好下面正式來讀一讀它的javadoc:
那下面來看一下CoroutineStart枚舉類的說明:
好,再回到launch()的javadoc接下來的繼續:
以上就是關於launch函數的javadoc的官方解讀,下面再來看一下例子:
我們知道在之前所有編寫的示例中都是在這個main方法體中,接下來弄個不一樣的寫法,看:
這也是之前理論所說:
那這段代碼此時它就會阻塞man線程,所以其效果就是main線程需要等runBlocking中的代碼執行完了退出,如下:
其效果跟之前的是一模一樣的:
在最后拋出一個問題?有木有一種機制能夠精確的等待協程執行完了,再執行主線程呢?目前我們的做法不太精確,就是定了一個休眠時間比協程長,如下:
答案肯定是有的,如果是要等某個線程執行完可以用join()【關於線程join()的使用可參考:https://www.cnblogs.com/webor2006/p/7895410.html】,但協程如何等待呢?咱們下次再揭曉。