日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java線程使用入門

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)行的。

成都創(chuàng)新互聯(lián)公司專注于灌南網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供灌南營銷型網(wǎng)站建設(shè),灌南網(wǎng)站制作、灌南網(wǎng)頁設(shè)計(jì)、灌南網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造灌南網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供灌南網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

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

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

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

對于簡單的作業(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鍵。

 
 
 
 
  1. import java.util.*;  
  2.  
  3. public class Hi {  
  4.  public static void main(String args[])   
  5.  throws java.io.IOException {  
  6.   TimerTask task = new TimerTask() {  
  7.   public void run() {  
  8.    System.out.println("Hi");  
  9.   }  
  10.  };  
  11.  Timer timer = new Timer();  
  12.  timer.schedule(task, 0, 500);  
  13.  System.out.println("Press ENTER to stop");  
  14.  System.in.read(new byte[10]);  
  15.  timer.cancel();  
  16. }  
  17. }   

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ì)程被稱為單線程的。這意味著對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ù)值被顯示。

 
 
 
 
  1. import javax.swing.*;  
  2. import java.awt.*;  
  3. import java.awt.event.*;  
  4.  
  5. public class Count {  
  6.  public static void main(String args[]) {  
  7.   JFrame frame = new JFrame();  
  8.   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  9.   Container contentPane = frame.getContentPane();  
  10.   final JLabel label = new JLabel("", JLabel.CENTER);  
  11.   label.setFont(new Font("Serif", Font.PLAIN, 36));  
  12.   contentPane.add(label, BorderLayout.CENTER);  
  13.   ActionListener listener = new ActionListener() {  
  14.    int count = 0;  
  15.    public void actionPerformed(ActionEvent e) {  
  16.     count++;  
  17.     label.setText(Integer.toString(count));  
  18.    }  
  19.   };  
  20.   Timer timer = new Timer(500, listener);  
  21.   timer.start();  
  22.   frame.setSize(300, 100);  
  23.   frame.show();  
  24.  }  
  25. }   

上述程序的結(jié)果是:

萬一你要做的不是一個(gè)簡單的重復(fù)作業(yè),java.lang.Thread類就派上了用場。它允許你自己控制基本功能。通過創(chuàng)建Thread的一個(gè)子類,你可以使你的系統(tǒng)脫離,并進(jìn)行一個(gè)長時(shí)間運(yùn)行的作業(yè),如從網(wǎng)絡(luò)上讀取一個(gè)文件,而不阻礙你的其它程序的運(yùn)行。這種長時(shí)間運(yùn)行的作業(yè)將在run方法中定義。  更多內(nèi)容請看Java環(huán)境安裝配置、Solaris基礎(chǔ)知識(shí)入門、Java編程開發(fā)手冊專題,或進(jìn)入討論組討論。

#p#

第二種方式是創(chuàng)建Thread類的子類并在子類中實(shí)現(xiàn)run方法,或在實(shí)現(xiàn)runnable的類中實(shí)現(xiàn)run方法,并將這個(gè)實(shí)現(xiàn)傳遞給Thread的構(gòu)造函數(shù)。

你可能會(huì)問有什么區(qū)別。Java編程語言僅支持單一繼承。如果你設(shè)計(jì)的調(diào)用是除了Thread以外的其它類,你可以是你的類實(shí)現(xiàn)Runnable,而它可以是你的作業(yè)被執(zhí)行。否則,你定義Thread的子類來運(yùn)行你的Run方法,在處理過程中不再添加其它操作。

對于創(chuàng)建Thread子類的第三種情況,下面的程序生成了一個(gè)新的線程來計(jì)算一個(gè)特定URL的字符數(shù),這個(gè)URL是通過命令行傳遞進(jìn)來的。在這進(jìn)行過程之中,實(shí)現(xiàn)Runnable的第四種情況被演示,打印出重復(fù)的消息。注意在實(shí)現(xiàn)Runnable的這后一種情況下,你必須提供重復(fù)消息的代碼。你必須同時(shí)sleep,以分配時(shí)間并完成操作。在兩種情況下,與使用Timer相比較。這段程序的***一部分包含有你從命令行讀取命令以觸發(fā)程序結(jié)束。注意在系統(tǒng)讀取URL并打印消息的同時(shí),你總可以按Enter鍵結(jié)束程序。

 
 
 
 
  1. import java.io.*;  
  2. import java.net.*;  
  3.  
  4. public class Both {  
  5.  public static void main(String args[]) {  
  6.   final String urlString = args[0];  
  7.   final String message = args[1];  
  8.   Thread thread1 = new Thread() {  
  9.    public void run() {  
  10.     try {  
  11.      URL url = new URL(urlString);  
  12.      URLConnection connection = url.openConnection();  
  13.      InputStreamReader isr = new InputStreamReader(  
  14.       connection.getInputStream());  
  15.      BufferedReader reader = new BufferedReader(isr);  
  16.      int count = 0;  
  17.      while (reader.read() != -1) {  
  18.        count++;  
  19.      }  
  20.      System.out.println("Size is : " + count);  
  21.      reader.close();  
  22.     } catch (MalformedURLException e) {  
  23.      System.err.println("Bad URL: "+ urlString);  
  24.     } catch (IOException e) {  
  25.      System.err.println("I/O Problems");  
  26.     }  
  27.    }  
  28.   };  
  29.   thread1.start();  
  30.   Runnable runnable = new Runnable() {  
  31.    public void run() {  
  32.     while(true) {  
  33.      System.out.println(message);  
  34.      try {  
  35.       Thread.sleep(500);  
  36.      } catch (InterruptedException e) {  
  37.      }  
  38.     }  
  39.    }  
  40.   };  
  41.   Thread thread2 = new Thread(runnable);  
  42.   thread2.start();  
  43.   try {  
  44.    System.out.println("Press ENTER to stop");  
  45.    System.in.read(new byte[10]);  
  46.   } catch (IOException e) {  
  47.   System.out.println("I/O problems");  
  48.  }  
  49.  System.exit(0);  
  50.  }  
  51. }   

為有多種方式來處理線程,你選用哪種技術(shù)取決于你和你面臨的條件。要成為一個(gè)有效的Java編程人員,盡管你通常不必學(xué)習(xí)Java編程語言的所有內(nèi)容和核心庫,但是線程是一個(gè)例外。你越早了解線程如何工作和如何使用線程,你將越早了解Java程序如何工作和交互。


分享題目:Java線程使用入門
文章地址:http://www.5511xx.com/article/cdgedss.html