工作小驛

          Ninja!

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

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

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

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

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

          實(shí)踐:

          //繼承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(); //用兩個線程執(zhí)行那10次循環(huán)

                 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();//用兩個線程執(zhí)行那50次循環(huán)

              t2.start();

           }} //實(shí)現(xiàn)Runnable接口

          class Xyz implements Runnable {

           int i;

           public void run() {

              i = 0;

              while (true) {

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

                if ( i == 50 ) {

              break;

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

          上面兩種方法繼承Thread類,是比較簡單的,代碼也比較少。但是我們不提倡使用這種方法。而第二種實(shí)現(xiàn)Runnable接口,更符合面向?qū)ο笏枷耄?/span>Thread是把虛擬的CPU看成一個對象,封裝了CPU的細(xì)節(jié)。但是Thread的構(gòu)造線程的子類的方法中與CPU不相關(guān),沒有必要把CPU的細(xì)節(jié)都繼承來。而實(shí)現(xiàn)Runnable則不影響java.lang.Thread的體系。而且便于其它類的繼承。

              線程并發(fā)的代碼和數(shù)據(jù)的執(zhí)行順序混亂,我們也需要自己調(diào)度和控制它們。請看附加教程,線程調(diào)度和并發(fā)

          posted on 2007-08-09 19:53 王君 閱讀(120) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 鞍山市| 宜宾市| 横峰县| 三穗县| 淮南市| 石泉县| 西乌| 邓州市| 苍溪县| 铁岭县| 鞍山市| 玉龙| 板桥市| 鄯善县| 德保县| 菏泽市| 句容市| 额敏县| 修武县| 齐齐哈尔市| 乐陵市| 龙胜| 老河口市| 吉水县| 司法| 古丈县| 伊宁县| 黑山县| 文登市| 临沧市| 凌源市| 新巴尔虎左旗| 如皋市| 祥云县| 南溪县| 雅江县| 堆龙德庆县| 安图县| 科技| 桑日县| 靖边县|