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

首頁 > 學院 > 開發(fā)設計 > 正文

如何使用線程

2019-11-17 06:06:24
字體:
供稿:網(wǎng)友

java平臺從開始就被設計成為多線程環(huán)境。在你的主程序執(zhí)行的時候,其它作業(yè)如碎片收集和事件處理則是在后臺進行的。本質(zhì)上,你可以認為這些作業(yè)是線程。它們正好是系統(tǒng)治理線程,但是無論如何,它們是線程。線程使你能夠定義相互獨立的作業(yè),彼此之間互不干擾。系統(tǒng)將交換這些作業(yè)進或出CPU,這樣(從外部看來)它們好象是同時運行的。

在你需要在你的程序中處理多個作業(yè)時,你也可以使用多個進程。這些進程可以是你自己創(chuàng)建的,你也可以操縱系統(tǒng)線程。

你進行這些多作業(yè)處理,要使用幾個不同的類或接口:

java.util.Timer類
javax.swing.Timer類
Thread類
Runnable接口

對于簡單的作業(yè),通常需要重復的,你可以使用java.util.Timer類告訴它“每半秒鐘做一次”。注重:大多數(shù)系統(tǒng)例程是使用毫秒的。半秒鐘是500毫秒。

你希望Timer實現(xiàn)的任務是在java.util.TimerTask實例中定義的,其中運行的方法包含要執(zhí)行的任務。這些在Hi類中進行了演示,其中字符串“Hi”重復地被顯示在屏幕上,直到你按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工作的方式是只要有一個線程在運行,程序就不退出。這樣,當取消被調(diào)用,沒有其它線程在運行了,則程序退出。有一些系統(tǒng)線程在運行,如碎片收集程序。這些系統(tǒng)線程也被稱為后臺線程。后臺線程的存在不影響運行環(huán)境被關(guān)閉,只有非后臺線程保證運行環(huán)境不被關(guān)閉。

Javax.swing.Timer類與java.util.timer類的工作方式相似,但是有一些差別需要注重。第一,運行的作業(yè)被ActionListener接口的實現(xiàn)來定義。第二,作業(yè)的執(zhí)行是在事件處理線程內(nèi)部進行的,而不象java.util.Timer類是在它的外部。這是很重要的,因為它關(guān)系到Swing組件集是如何設計的。

假如你不熟悉Swing,它是一組可以被Java程序使用的圖形組件。Swing被設計程被稱為單線程的。這意味著對Swing類內(nèi)部內(nèi)容的訪問必須在單個線程中完成。這個特定的線程是事件處理線程。這樣,例如你想改變Label組件的文字,你不能僅僅調(diào)用Jlabel的setText方法。相反,你必須確認setText調(diào)用發(fā)生在事件處理線程中,而這正是javax.swing.Time類派的上用場的地方。

為了說明這第二種情況,下面的程序顯示一個增加的計數(shù)器的值。美半秒鐘計數(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();
   }
 }



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙陵县| 鹤山市| 当阳市| 井冈山市| 从江县| 和林格尔县| 东乡| 江门市| 额尔古纳市| 察隅县| 朝阳区| 甘洛县| 灵武市| 旅游| 平泉县| 萨嘎县| 呼和浩特市| 吴江市| 于田县| 林口县| 宁晋县| 资阳市| 石城县| 屏东市| 新巴尔虎左旗| 元氏县| 鸡西市| 嘉荫县| 池州市| 江川县| 元朗区| 阳高县| 关岭| 临武县| 武安市| 鄱阳县| 应城市| 马关县| 芮城县| 微博| 平阳县|