Android執行緒篇(一)實現執行緒的幾種方法及區別

Android開發者社群發表於2017-12-17

Android執行緒篇(一)實現執行緒的幾種方法及區別

“Android開發者社群”微信群期待各位加入,我們一起“摳腚”,一起進步,一起探討技術……
微信ID:393795397 掘金主頁:Android開發者社群

前言:看了這麼多執行緒方面的文章,都是比較鬆散、碎片的知識點,從來沒有看到系統的講解執行緒以及併發的文章,自從看了微信公眾號"code小生"發的一片關於執行緒方面基礎的講解,文章寫的很好,通俗易懂,但是我感覺到很不過癮,因為我剛嚐到點滋味,後面沒有了,所以我決定寫個執行緒和併發的系列,筆者造詣有限,如有描述不當,還忘大家多多指正。

  • 本系列文章全部用Kotlin實現
  • 本文參考“code小生”公眾號“帶你通俗易懂的理解——執行緒、多執行緒與執行緒池” 作者:wildma 作者部落格:http://www.jianshu.com/p/fd7d30aa451b

今天開啟執行緒講系列講解的第一篇文章,我們從最基礎來講起,首先先來幾個概念:

程式和執行緒

  • 程式:簡單來說它是執行緒的載體,其實它不單單是執行緒的載體,這個想知道可以自行百度,不是我們今天要討論的重點
  • 執行緒:程式執行流的最小單元,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點兒在執行中必不可少的資源
  • 執行緒和程式的關係:同一程式中可以有多個執行緒,每個執行緒可與同屬一個程式的其它執行緒共享程式所擁有的全部資源

上面的講解不是很好理解,關於程式與執行緒的講解,這篇文章講的挺好的-->程式與執行緒的一個簡單解釋,結合這篇文章可以透徹瞭解執行緒和程式 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 下面來進入本文的重點,來講解一下實現執行緒的幾種方法:

1.var一個Thread物件

  • var一個Thread物件
  • 重寫Thread的run方法
  • run方法裡面寫你的程式碼塊
  override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var thread=object : Thread() {
            override fun run() {
                super.run()
                for (i in 0 until 100){
                    println("<<<<<<<"+Thread.currentThread().name+"<<<<"+i)
                }
            }
        }
        thread.start()
    }
複製程式碼

騷年,看不懂就該補課了,強烈推薦專案使用Kotlin

2.實現Runnable介面

直接上程式碼:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var thread=Thread(myRunnable())
        thread.start()
    }
    class myRunnable : Runnable{
        override fun run() {
            for (i in 0 until 100){
                println("<<<<<<<"+Thread.currentThread().name+"<<<<"+i)
            }
        }

    }
複製程式碼

3.實現 Callable 介面

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //建立單個執行緒池
        var myPool=Executors.newSingleThreadExecutor()
        var myFuture=myPool.submit(myCallable())
        myFuture.get()
        println("<<<<<<<<<"+myFuture.get())
    }

    class myCallable : Callable<Int>{
        override fun call(): Int {
            var a=0
            for (i in 0 until 100){
                a=i
            }
            return a
        }
    }
複製程式碼

相關文章