程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java程序開發中如何應用線程

Java程序開發中如何應用線程

編輯:關於JAVA

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程序如何工作和交互。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved