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

Java多線程編程三步曲[1]

2013-11-23 19:55:31  來源: Java高級技術 
    Java平台從開始就被設計成為多線程環境在你的主程序執行的時候其它作業如碎片收集和事件處理則是在後台進行的
    
    本質上你可以認為這些作業是線程它們正好是系統管理線程但是無論如何它們是線程線程使你能夠定義相互獨立的作業彼此之間互不干擾系統將交換這些作業進或出CPU這樣(從外部看來)它們好象是同時運行的
    
    在你需要在你的程序中處理多個作業時你也可以使用多個進程這些進程可以是你自己創建的你也可以操縱系統線程你進行這些多作業處理要使用幾個不同的類或接口
    
    javautilTimer類
    javaxswingTimer類
    Thread類
    Runnable接口
    
    對於簡單的作業通常需要重復的你可以使用javautilTimer類告訴它每半秒鐘做一次注意大多數系統例程是使用毫秒的半秒鐘是毫秒
    
    你希望Timer實現的任務是在javautilTimerTask實例中定義的其中運行的方法包含要執行的任務這些在Hi類中進行了演示其中字符串Hi重復地被顯示在屏幕上直到你按Enter鍵
    
    import javautil*;    
    public class Hi
      {
        public static void main(String args[]) throws javaioIOException
            {
                TimerTask task = new TimerTask()
            } 
       public void run()
            {
                Systemoutprintln(Hi);
            }
      };
    Timer timer = new Timer();
    timerschedule(task );
    Systemoutprintln(Press ENTER to stop);
    Systeminread(new byte[]);
    timercancel();
        
    Java Runtime Environment工作的方式是只要有一個線程在運行程序就不退出這樣當取消被調用沒有其它線程在運行了則程序退出有一些系統線程在運行如碎片收集程序這些系統線程也被稱為後台線程後台線程的存在不影響運行環境被關閉只有非後台線程保證運行環境不被關閉
    
    JavaxswingTimer類與javautiltimer類的工作方式相似但是有一些差別需要注意第一運行的作業被ActionListener接口的實現來定義第二作業的執行是在事件處理線程內部進行的而不象javautilTimer類是在它的外部這是很重要的因為它關系到Swing組件集是如何設計的
    
    如果你不熟悉Swing它是一組可以被Java程序使用的圖形組件Swing被設計程被稱為單線程的這意味著對Swing類內部內容的訪問必須在單個線程中完成這個特定的線程是事件處理線程
    
    這樣例如你想改變Label組件的文字你不能僅僅調用Jlabel的setText方法相反你必須確認setText調用發生在事件處理線程中而這正是javaxswingTime類派的上用場的地方
    
    為了說明這第二種情況下面的程序顯示一個增加的計數器的值每半秒鐘計數器的數值增加並且新的數值被顯示:
    
    import javaxswing*;
    import javaawt*;
    import javaawtevent*;    
    public class Count
        {
            public static void
            main(String args[])
        }
    JFrame frame = new JFrame();
    framesetDefaultCloseOperation
    (JFrameEXIT_ON_CLOSE);
    Container contentPane =
    framegetContentPane();
    final JLabel label =
    new JLabel( JLabelCENTER);
    labelsetFont(new Font (Serif FontPLAIN ));
    contentPaneadd(label
    BorderLayoutCENTER);
    ActionListener listener = new ActionListener()
        {
            int count = ;
            public void actionPerformed
            (ActionEvent e)
        }
    count++;
    labelsetText
    (IntegertoString(count));
    Timer timer = new Timer( listener);
    timerstart();
    framesetSize( );
    frameshow();

    上述程序的結果是

[]  []  


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