国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

編程技巧:在Java應(yīng)用開發(fā)中如何使用線程

2019-11-18 10:47:19
字體:
供稿:網(wǎng)友

  java平臺(tái)從開始就被設(shè)計(jì)成為多線程環(huán)境。在你的主程序執(zhí)行的時(shí)候,其它作業(yè)如碎片收集和事件處理則是在后臺(tái)進(jìn)行的。
  
  本質(zhì)上,你可以認(rèn)為這些作業(yè)是線程。它們正好是系統(tǒng)治理線程,但是無論如何,它們是線程。線程使你能夠定義相互獨(dú)立的作業(yè),彼此之間互不干擾。系統(tǒng)將交換這些作業(yè)進(jìn)或出CPU,這樣(從外部看來)它們好象是同時(shí)運(yùn)行的。
  
  在你需要在你的程序中處理多個(gè)作業(yè)時(shí),你也可以使用多個(gè)進(jìn)程。這些進(jìn)程可以是你自己創(chuàng)建的,你也可以操縱系統(tǒng)線程。你進(jìn)行這些多作業(yè)處理,要使用幾個(gè)不同的類或接口:
  
  java.util.Timer類
  javax.swing.Timer類
  Thread類
  Runnable接口
  
  對(duì)于簡單的作業(yè),通常需要重復(fù)的,你可以使用java.util.Timer類告訴它“每半秒鐘做一次”。注重:大多數(shù)系統(tǒng)例程是使用毫秒的。半秒鐘是500毫秒。
  
  你希望Timer實(shí)現(xiàn)的任務(wù)是在java.util.TimerTask實(shí)例中定義的,其中運(yùn)行的方法包含要執(zhí)行的任務(wù)。這些在Hi類中進(jìn)行了演示,其中字符串“Hi”重復(fù)地被顯示在屏幕上,直到你按Enter鍵。
  
  import java.util.*;
  
  public class Hi
  {
  public static void main
  (String args[])
  throws java.io.IOException
  {
  TimerTask task = new TimerTask()
  {
  public void run()
  {
  System.out.  }
  };
  Timer timer = new Timer();
  timer.schedule(task, 0, 500);
  System.out.println
  ("Press ENTER to stop");
  System.in.read(new byte[10]);
  timer.cancel();
  }
  }
  
  Java Runtime Environment工作的方式是只要有一個(gè)線程在運(yùn)行,程序就不退出。這樣,當(dāng)取消被調(diào)用,沒有其它線程在運(yùn)行了,則程序退出。有一些系統(tǒng)線程在運(yùn)行,如碎片收集程序。這些系統(tǒng)線程也被稱為后臺(tái)線程。后臺(tái)線程的存在不影響運(yùn)行環(huán)境被關(guān)閉,只有非后臺(tái)線程保證運(yùn)行環(huán)境不被關(guān)閉。
  
  Javax.swing.Timer類與java.util.timer類的工作方式相似,但是有一些差別需要注重。第一,運(yùn)行的作業(yè)被ActionListener接口的實(shí)現(xiàn)來定義。第二,作業(yè)的執(zhí)行是在事件處理線程內(nèi)部進(jìn)行的,而不象java.util.Timer類是在它的外部。這是很重要的,因?yàn)樗P(guān)系到Swing
組件集是如何設(shè)計(jì)的。
  
  假如你不熟悉Swing,它是一組可以被Java程序使用的圖形組件。Swing被設(shè)計(jì)程被稱為單線程的。這意味著對(duì)Swing類內(nèi)部內(nèi)容的訪問必須在單個(gè)線程中完成。這個(gè)特定的線程是事件處理線程。
  
  這樣,例如你想改變Label組件的文字,你不能僅僅調(diào)用Jlabel的setText方法。相反,你必須確認(rèn)setText調(diào)用發(fā)生在事件處理線程中,而這正是javax.swing.Time類派的上用場的地方。
  
  為了說明這第二種情況,下面的程序顯示一個(gè)增加的計(jì)數(shù)器的值。美半秒鐘計(jì)數(shù)器的數(shù)值增加,并且新的數(shù)值被顯示:
  
  import javax.swing.*;
  import java.awt.*;
  import java.awt.event.*;
  
  public class Count
  {
  public static void
  main(String args[])
  {
  JFrame frame = new JFrame();
  frame.setDefaultCloSEOperation
  (JFrame.EXIT_ON_CLOSE);
  Container contentPane =
  frame.getContentPane();
  final JLabel label =
  new JLabel("", JLabel.CENTER);
  label.setFont(new Font
  ("Serif", Font.PLAIN, 36));
  contentPane.add(label,
  BorderLayout.CENTER);
  ActionListener listener
  = new ActionListener()
  {
  int count = 0;
  public void actionPerformed
  (ActionEvent e)
  {
  count++;
  label.setText
  (Integer.toString(count));
  }
  };
  Timer timer = new Timer(500, listener);
  timer.start();
  frame.setSize(300, 100);
  frame.show();
  }
  }
  上述程序的結(jié)果是:
  
編程技巧:在Java應(yīng)用開發(fā)中如何使用線程

  萬一你要做的不是一個(gè)簡單的重復(fù)作業(yè),java.lang.Thread類就派上了用場。它答應(yīng)你自己控制基本功能。通過創(chuàng)建Thread的一個(gè)子類,你可以使你的系統(tǒng)脫離,并進(jìn)行一個(gè)長時(shí)間運(yùn)行的作業(yè),如從網(wǎng)絡(luò)上讀取一個(gè)文件,而不阻礙你的其它程序的運(yùn)行。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 麻栗坡县| 剑川县| 临夏市| 台南县| 上蔡县| 日喀则市| 龙胜| 星子县| 腾冲县| 凌源市| 泰顺县| 丰城市| 临城县| 汾阳市| 定襄县| 交口县| 光泽县| 池州市| 武山县| 丹寨县| 中牟县| 汽车| 武隆县| 荆州市| 齐河县| 利川市| 沾化县| 万宁市| 绵阳市| 乐都县| 普格县| 库车县| 益阳市| 上饶县| 静海县| 鹤山市| 同心县| 石泉县| 临泉县| 仁化县| 大姚县|