dream-in-fly
          路上...
          posts - 31,  comments - 6,  trackbacks - 0
          作者:xm4014

          今天開始學習Java中多線程的實現(xiàn).

            線程是一些可以并行的,獨立的執(zhí)行的代碼.之前我編的程序都只能做一件事情,也就是只有一個線程.多線程的編程就是可以將程序任務分成多個并行的子任務,同時運行,互不干擾.我對多線程的理解是從格斗游戲得來的.格斗游戲中兩人對打就是通過兩個線程來實現(xiàn)的吧,否則如何能夠你出你的招,我發(fā)我的沖擊波呢.

            (1月18日)突然想到一個問題,補充一下.多線程是不是我們通常所說的多任務呢?我的理解是,不能這樣說也可以這樣說.

            簡單說來,多線程提供了一種在進程內部進行多個線程并行調度的機制,而多任務則提供的是在一個操作系統(tǒng)內部運行多個進程的機制.

            多任務操作系統(tǒng)(如Windows)的基本原理是這樣的:操作系統(tǒng)將CPU的時間片分配給多個線程,每個線程在操作系統(tǒng)指定的時間片內完成(注意,這里的多個線程是分屬于不同進程的).操作系統(tǒng)不斷的從一個線程的執(zhí)行切換到另一個線程的執(zhí)行,如此往復,宏觀上看來,就好像是多個線程在一起執(zhí)行.由于這多個線程分屬于不同的進程,因此在我們看來,就好像是多個進程在同時執(zhí)行,這樣就實現(xiàn)了多任務.Whoops,真繞口.

            如上,多線程和多任務是有很明顯的區(qū)別的.但是再想一下,在一個應用程序內實現(xiàn)多線程不也是靠CPU分配時間片嗎?既然原理是相同的,那么多線程也可以說是多任務的.

            一個Java程序啟動后,就已經(jīng)有一個線程在運行,我們可以通過下面的例子來初步建立一個線程的實際印象

          class testthread{
          public static void main(String args[]){
          Thread t=Thread.currentThread();
          t.setName("This Thread is running");
          System.out.println("The running thead:"+t);
          try{
          for(int i=0;i<5;i++)
          {
          System.out.println("Sleep time"+i);
          Thread.sleep(1000);//掛起線程,就是讓線程休息一會兒,
          //不占用系統(tǒng)資源,因此其它線程可以繼續(xù).
          //這里的Thread缺省表示主線程
          }
          }catch(InterruptedException e){System.out.println("thread has wrong");}
          }
          }

            這只是一個線程,那么我們怎么實現(xiàn)多個線程呢?又怎樣讓線程做我安排它要做的事情呢?

            實現(xiàn)線程體的構造有兩種方法.

            第一種方法是通過繼承構造線程體.

            在Java中專門有一個Thread類,這個類里面有一個函數(shù)run(),里面記錄著線程要完成的操作,就好像通常所說的主函數(shù)main()一樣,run()函數(shù)運行完了,線程就結束了.通過繼承這個類,我們可以定義我們自己的線程,在run函數(shù)中告訴它該做什么事情.下面的程序就是繼承了一個SimpleThread類,用兩個線程來輸出HelloWorld.

          public class TwoThread{

          public static void main(String args[]){
          new SimpleThread("HelloWorld1").start();//創(chuàng)建兩個線程的實例,就這么簡單
          new SimpleThread("HelloWorld2").start();
          }

          }
          class SimpleThread extends Thread{ file://真正的內容在這里
          public SimpleThread(String str){
          super(str);//super代表SimpleThread類的直接父類,這里就是Thread
          }

          file://我們要線程做的事情都在這里了
          public void run(){
          for(int i=0;i<10;i++){
          System.out.println(i+" "+getName());
          try{
          sleep((int)(Math.random()*1000));
          }catch(InterruptedException e){}
          }
          System.out.println("Done!"+getName());
          }
          }

            運行的結果是兩個線程交替顯示各自的HelloWorld十次,輸出是混在一起的,因為兩個線程是同時運行的.

          posted on 2005-04-01 20:30 小毅 閱讀(208) 評論(0)  編輯  收藏 所屬分類: 手機游戲

          <2005年4月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章檔案

          blog 好友

          友情鏈接

          常用網(wǎng)站

          技術網(wǎng)站論壇

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 邛崃市| 彭山县| 岢岚县| 句容市| 天镇县| 彭州市| 彰武县| 潜山县| 佛冈县| 重庆市| 安塞县| 盈江县| 昔阳县| 嘉善县| 枣强县| 牙克石市| 乌拉特中旗| 葫芦岛市| 都安| 巫山县| 南昌市| 嘉义县| 韩城市| 张北县| 邓州市| 洪泽县| 德格县| 宁河县| 杂多县| 中阳县| 巴东县| 广安市| 化隆| 广灵县| 阿城市| 清远市| 桂阳县| 龙州县| 修文县| 永福县| 凌云县|