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

關於Java主線程

2013-11-23 19:50:37  來源: Java高級技術 

  java應用程序中會有一個main函數是作為某個類的方法出現的當程序啟動時該函數就會第一個自動得到執行並成為程序的主線程就是說main函數是一個應用的入口也代表了這個應用主線程這和c程序中的main函數很相似

  關於這個main方法應該好好理解清楚在下面這個網址中有一篇文章《Java main方法如何弄清進程問題》對其講的很好

  

  Java main方法需要我們不斷的學習下面我們就看看如何才能更好的使用呢?首先我們來看看架構上的問題隨著計算機技術的發展編程模型也越來越復雜多樣化

  但多線程編程模型是目前計算機系統架構的最終模型隨著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最先會產生一個主線程由它來運行指定程序的入口點在這個程序中就是主線程從Java 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方法第一行產生了一個線程對象但並沒有線程啟動

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

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

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


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27543.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.