工作小驛

          Ninja!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(1)

          隨筆分類(103)

          隨筆檔案(103)

          最新隨筆

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

              java語言中有一個重要的特性是支持多線程。多線程是java的一項高級技術,它涉及到操作系統里面的知識,層次貼近系統層面。對于普通程序員一般很少碰它。而且目前就是在java EE(原來的J2EE)的相關框架里,對線程這個東西都是盡量回避。程序員最理想的狀態是專注業務邏輯,而不是天天想著線程這個東西怎么寫。

              思考一個問題程序的本質是什么?是CPU的指令序列的集合。到底什么順序是程序員編寫的讓計算機賦值,它就賦值、寫個循環它就循環、寫個分支語句它就分支、寫個跳轉它就跳轉。每個指令流就是一個線程,并發執行多個指令流就是多線程。大家想,只有一個CPU怎么可能同時發出多個指令流呢?是的,并發只是“邏輯”上的,物理上是不可能的除非是兩個以上的CPU

          多線程和傳統的單線程的區別是由于各個線程的控制流彼此獨立,使得各個線程之間的代碼是亂序執行的,出現了并發訪問帶來的一切問題。正像是三個和尚的故事,和尚多了未必是好事。也就是剛才說的,程序員一般都不讓他們碰這個東西。

               java中如何寫線程呢,在java中就是很簡單了。有兩種方法:第一、繼承java.lang.Thread第二、實現Runnable接口。

          實踐:

          //繼承Thread而重寫了run()方法

          public class Hello extends Thread{

              int i;

              public void run(){

                 while(true){

                     System.out.println("Hello "+i++);

                     if(i==10) break;

                 }}}

          public class HelloThread {

              public static void main(String[] args){

                 Hello h1 = new Hello();

                 Hello h2 = new Hello();

                 h1.start(); //用兩個線程執行那10次循環

                 h2.start();

          }} 上面的例子是第一種方法,下面是第二種方法

          public class TestThread {

           public static void main(String args[]) {

              Xyz r = new Xyz();

              Xyz r1 = new Xyz();

              Thread t1 = new Thread(r);

              Thread t2 = new Thread(r1);

              t1.start();//用兩個線程執行那50次循環

              t2.start();

           }} //實現Runnable接口

          class Xyz implements Runnable {

           int i;

           public void run() {

              i = 0;

              while (true) {

                System.out.println("Hello " + i++);

                if ( i == 50 ) {

              break;

          }}}}多個源碼打包下載

          上面兩種方法繼承Thread類,是比較簡單的,代碼也比較少。但是我們不提倡使用這種方法。而第二種實現Runnable接口,更符合面向對象思想,Thread是把虛擬的CPU看成一個對象,封裝了CPU的細節。但是Thread的構造線程的子類的方法中與CPU不相關,沒有必要把CPU的細節都繼承來。而實現Runnable則不影響java.lang.Thread的體系。而且便于其它類的繼承。

              線程并發的代碼和數據的執行順序混亂,我們也需要自己調度和控制它們。請看附加教程,線程調度和并發

          posted on 2007-08-09 19:53 王君 閱讀(121) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 常山县| 揭东县| 珠海市| 铜陵市| 泰安市| 南通市| 来安县| 万安县| 孙吴县| 榆林市| 临武县| 安新县| 汉川市| 北京市| 驻马店市| 岐山县| 湘乡市| 松潘县| 南涧| 鄂尔多斯市| 安庆市| 海门市| 尚义县| 凤阳县| 清河县| 镇赉县| 大同县| 房产| 黄骅市| 高邑县| 寻乌县| 平邑县| 江门市| 安图县| 澜沧| 湖南省| 怀宁县| 蓝山县| 凉山| 开封县| 华池县|