提示:Java程式開發中如何應用線程

來源:互聯網
上載者:User
程式|技巧

Java平台從開始就被設計成為多線程環境。在你的主程式執行的時候,其它作業如片段收集和事件處理則是在後台進行的。

本質上,你可以認為這些作業是線程。它們正好是系統管理線程,但是無論如何,它們是線程。線程使你能夠定義相互獨立的作業,彼此之間互不干擾。系統將交換這些作業進或出cpu,這樣(從外部看來)它們好象是同時啟動並執行。

在你需要在你的程式中處理多個作業時,你也可以使用多個進程。這些進程可以是你自己建立的,你也可以操縱系統線程。你進行這些多作業處理,要使用幾個不同的類或介面:

java.util.timer類

javax.swing.timer類

thread類

runnable介面

對於簡單的作業,通常需要重複的,你可以使用java.util.timer類告訴它“每半秒鐘做一次”。注意:大多數系統常式是使用毫秒的。半秒鐘是500毫秒。

你希望timer實現的任務是在java.util.timertask執行個體中定義的,其中啟動並執行方法包含要執行的任務。這些在hi類中進行了示範,其中字串“hi”重複地被顯示在螢幕上,直到你按enter鍵。

import java.util.*;    public class hi  {  public static void main  (string args);  timer.cancel();  }  }

java runtime environment工作的方式是只要有一個線程在運行,程式就不退出。這樣,當取消被調用,沒有其它線程在運行了,則程式退出。有一些系統線程在運行,如片段收集程式。這些系統線程也被稱為後台線程。後台線程的存在不影響運行環境被關閉,只有非後台線程保證運行環境不被關閉。

javax.swing.timer類與java.util.timer類的工作方式相似,但是有一些差別需要注意。第一,啟動並執行作業被actionlistener介面的實現來定義。第二,作業的執行是在事件處理線程內部進行的,而不象java.util.timer類是在它的外部。這是很重要的,因為它關係到swing組件集是如何設計的。

如果你不熟悉swing,它是一組可以被java程式使用的圖形組件。swing被設計程被稱為單線程的。這意味著對swing類內部內容的訪問必須在單個線程中完成。這個特定的線程是事件處理線程。

這樣,例如你想改變label組件的文字,你不能僅僅調用jlabel的settext方法。相反,你必須確認settext調用發生在事件處理線程中,而這正是javax.swing.time類派的上用場的地方。

為了說明這第二種情況,下面的程式顯示一個增加的計數器的值。美半秒鐘計數器的數值增加,並且新的數值被顯示:

import javax.swing.*;  import java.awt.*;  import java.awt.event.*;    public class count  {  public static void  main(string args)  {  final string urlstring = args;  final string message = args;  thread thread1 = new thread()  {  public void run()  {  try  {  url url = new url(urlstring);  urlconnection connection =  url.openconnection();  inputstreamreader isr = new  inputstreamreader(  connection.getinputstream());  bufferedreader reader =  new bufferedreader(isr);  int count = 0;  while (reader.read() != -1)  {  count++;  }  system.out.println("size is : "  + count);  reader.close();  } catch (malformedurlexception e)  {  system.err.println("bad url: "  + urlstring);  } catch (ioexception e)  {  system.err.println  ("i/o problems");  }  }  };  thread1.start();  runnable runnable = new runnable()  {  public void run()  {  while(true)  {  system.out.println(message);  try  {  thread.sleep(500);  } catch (interruptedexception e)  {  }  }  }  };  thread thread2 = new thread(runnable);  thread2.start();  try {  system.out.println  ("press enter to stop");  system.in.read(new byte);  } catch (ioexception e)  {  system.out.println("i/o problems");  }  system.exit(0);  }  }

因為有多種方式來處理線程,你選用哪種技術取決於你和你面臨的條件。要成為一個有效java編程人員,儘管你通常不必學習java程式設計語言的所有內容和核心庫,但是線程是一個例外。你越早瞭解線程如何工作和如何使用線程,你將越早瞭解java程式如何工作和互動。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.