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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java多线程总结一:线程的两种创建方式及优劣比较

發布時間:2023/12/2 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程总结一:线程的两种创建方式及优劣比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、通過實現Runnable接口線程創建

(1).定義一個類實現Runnable接口,重寫接口中的run()方法。在run()方法中加入具體的任務代碼或處理邏輯。

(2).創建Runnable接口實現類的對象。

(3).創建一個Thread類的對象,需要封裝前面Runnable接口實現類的對象。(接口可以實現多繼承)

(4).調用Thread對象的start()方法,啟動線程

示例代碼:

[java]?view plaincopy
  • <span?style="font-size:16px;">package?demo.thread;??
  • ??
  • public?class?TreadDemo1?implements?Runnable?{??
  • ????private?int?countDown?=?10;??
  • ????@Override??
  • ????//?在run方法中定義任務??
  • ????public?void?run()?{??
  • ????????while?(countDown--?>?0)?{??
  • ????????????System.out.println("#"?+?Thread.currentThread().getName()?+?"("??
  • ????????????????????+?countDown?+?")");??
  • ????????}??
  • ????}??
  • ??
  • ????public?static?void?main(String[]?args)?{??
  • ????????//?Runnable中run方法是一個空方法,并不會產生任何線程行為,必須顯式地將一個任務附著到線程上??
  • ????????TreadDemo1?tt=new?TreadDemo1();??
  • ????????new?Thread(tt).start();??
  • ????????new?Thread(tt).start();??
  • ????????System.out.println("火箭發射前倒計時:");??
  • ????}??
  • }??
  • </span>??

  • 運行結果:

    火箭發射前倒計時:
    #Thread-1(8)
    #Thread-1(7)
    #Thread-1(6)
    #Thread-1(5)
    #Thread-1(4)
    #Thread-1(3)
    #Thread-1(2)
    #Thread-1(1)
    #Thread-1(0)
    #Thread-0(9)

    2、通過繼承Thread類創建線程

    (1).首先定義一個類去繼承Thread父類,重寫父類中的run()方法。在run()方法中加入具體的任務代碼或處理邏輯。
    (2).直接創建一個ThreadDemo2類的對象,也可以利用多態性,變量聲明為父類的類型。

    (3).調用start方法,線程t啟動,隱含的調用run()方法。

    示例代碼:

    [java]?view plaincopy
  • <span?style="font-size:16px;">package?demo.thread;??
  • ??
  • public?class?ThreadDemo2?extends?Thread?{??
  • ????private?int?countDown?=?10;??
  • ??
  • ????@Override??
  • ????//?在run方法中定義任務??
  • ????public?void?run()?{??
  • ????????while?(countDown--?>?0)?{??
  • ????????????System.out.println("#"?+?this.getName()?+?"("?+?countDown?+?")");??
  • ????????}??
  • ????}??
  • ??
  • ????public?static?void?main(String[]?args)?{??
  • ????????new?ThreadDemo2().start();??
  • ????????new?ThreadDemo2().start();??
  • ????????//?由于start方法迅速返回,所以main線程可以執行其他的操作,此時有兩個獨立的線程在并發運行??
  • ????????System.out.println("火箭發射前倒計時:");??
  • ????}??
  • }??
  • </span>??

  • 運行結果:

    #Thread-0(9)
    #Thread-0(8)
    #Thread-0(7)
    #Thread-0(6)
    #Thread-0(5)
    #Thread-0(4)
    #Thread-0(3)
    #Thread-0(2)
    #Thread-0(1)
    #Thread-0(0)
    火箭發射前倒計時:
    #Thread-1(9)
    #Thread-1(8)
    #Thread-1(7)
    #Thread-1(6)
    #Thread-1(5)
    #Thread-1(4)
    #Thread-1(3)
    #Thread-1(2)
    #Thread-1(1)
    #Thread-1(0)
    3、兩種方式的比較

    首先分析兩種方式的輸出結果,同樣是創建了兩個線程,為什么結果不一樣呢?

    使用實現Runnable接口方式創建線程可以共享同一個目標對象(TreadDemo1 tt=new TreadDemo1();),實現了多個相同線程處理同一份資源。

    然后再看一段來自JDK的解釋:

    Runnable?接口應該由那些打算通過某一線程執行其實例的類來實現。類必須定義一個稱為run?的無參數方法。

    設計該接口的目的是為希望在活動時執行代碼的對象提供一個公共協議。例如,Thread?類實現了Runnable。激活的意思是說某個線程已啟動并且尚未停止。

    此外,Runnable?為非?Thread?子類的類提供了一種激活方式。通過實例化某個Thread?實例并將自身作為運行目標,就可以運行實現?Runnable?的類而無需創建?Thread?的子類。大多數情況下,如果只想重寫run()?方法,而不重寫其他?Thread?方法,那么應使用?Runnable?接口。這很重要,因為除非程序員打算修改或增強類的基本行為,否則不應為該類創建子類。

    ?

    采用繼承Thread類方式:
    (1)優點:編寫簡單,如果需要訪問當前線程,無需使用Thread.currentThread()方法,直接使用this,即可獲得當前線程。
    (2)缺點:因為線程類已經繼承了Thread類,所以不能再繼承其他的父類。
    采用實現Runnable接口方式:
    (1)優點:線程類只是實現了Runable接口,還可以繼承其他的類。在這種方式下,可以多個線程共享同一個目標對象,所以非常適合多個相同線程來處理同一份資源的情況,從而可以將CPU代碼和數據分開,形成清晰的模型,較好地體現了面向對象的思想。
    (2)缺點:編程稍微復雜,如果需要訪問當前線程,必須使用Thread.currentThread()方法。

    轉載于:https://www.cnblogs.com/kinghitomi/archive/2012/01/19/2327405.html

    總結

    以上是生活随笔為你收集整理的java多线程总结一:线程的两种创建方式及优劣比较的全部內容,希望文章能夠幫你解決所遇到的問題。

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