熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java多線程編程基礎之線程和多線程

2022-06-13   來源: Java高級技術 

  隨著計算機技術的發展編程模型也越來越復雜多樣化但多線程編程模型是目前計算機系統架構的最終模型隨著CPU主頻的不斷攀升X架構的硬件已經成為瓶在這種架構的CPU主頻最高為G事實上目前G主頻的CPU已經接近了頂峰

  如果不能從根本上更新當前CPU的架構(在很長一段時間內還不太可能)那麼繼續提高CPU性能的方法就是超線程CPU模式那麼作業系統應用程序要發揮CPU的最大性能就是要改變到以多線程編程模型為主的並行處理系統和並發式應用程序

  所以掌握多線程編程模型不僅是目前提高應用性能的手段更是下一代編程模型的核心思想多線程編程的目的就是最大限度地利用CPU資源當某一線程的處理不需要占用CPU而只和I/OOEMBIOS等資源打交道時讓需要占用CPU資源的其它線程有機會獲得CPU資源從根本上說這就是多線程編程的最終目的

  第一需要弄清的問題

  如同程序和進程的區別要掌握多線程編程第一要弄清的問題是線程對象和線程的區別

  線程對象是可以產生線程的對象比如在java平台中Thread對象Runnable對象線程是指正在執行的一個指點令序列在java平台上是指從一個線程對象的start()開始運行run方法體中的那一段相對獨立的過程

  鑒於作者的水平無法用更確切的詞匯來描述它們的定義但這兩個有本質區別的概念請初學者細細體會隨著介紹的深入和例程分析的增加就會慢慢明白它們所代表的真實含義

  天下難事必始於易天下大事必始於細

  讓我們先從最簡單的單線程來入手()帶引號說明只是相對而言的單線程()基於java

   class BeginClass{

  public static void main(String[] args){

  for(int i=;i<;i++)

  Systemoutprintln(HelloWorld!);

  }

  }

  如果我們成功編譯了該java文件然後在命令行上敲入

   java BeginClass

  現在發生了什麼呢?每一個java程序員從他開始學習java的第一分鐘裡都會接觸到這個問題但是你知道它到底發生發什麼?

  JVM進程被啟動在同一個JVM進程中有且只有一個進程就是它自己然後在這個JVM環境中所有程序的運行都是以線程來運行JVM最先會產生一個主線程由它來運行指定程序的入口點在這個程序中就是主線程從main方法開始運行當main方法結束後主線程運行完成JVM進程也隨之退出

  我們看到的是一個主線程在運行main方法這樣的只有一個線程執行程序邏輯的流程我們稱

  之為單線程這是JVM提供給我們的單線程環境事實上JVM底層還至少有垃圾回收這樣的後台線程以及其它非java線程但這些線程對我們而言不可訪問我們只認為它是單線程的

  主線程是JVM自己啟動的在這裡它不是從線程對象產生的在這個線程中它運行了main方法這個指令序列理解它但它沒有更多可以研究的內容

  接觸多線程

   class MyThread extends Thread{

  public void run(){

  Systemoutprintln(Thread say:HelloWorld!);

  }

  }

  public class MoreThreads{

  public static void main(String[] args){

  new MyThread();

  new MyThread()start();

  Systemoutprintln(Main say:HelloWorld);

  }

  }

  執行這個程序main方法第一行產生了一個線程對象但並沒有線程啟動

  main方法第二行產生了一個線程對象並啟動了一個線程

  main方法第三行產生並啟動一個線程後主線程自己也繼續執行其它語句

  我們先不研究Thread對象的具體內容稍微來回想一下上面的兩個概念線程對象和線程在JAVA中線程對象是JVM產生的一個普通的Object子類而線程是CPU分配給這個對象的一個運行過程我們說的這個線程在干什麼不是說一個線程對象在干什麼而是這個運行過程在干什麼如果一時想不明白不要急但你要記得它們不是一回事就行了


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27552.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.