成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java線程使用入門

開發 后端
本文是Java線程使用的入門級教程。Java平臺從開始就被設計成為多線程環境,多線程的好處在于可以充分利用處理器資源,保證更快速的完成任務。

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

在你需要在你的程序中處理多個作業時,你也可以使用多個進程。這些進程可以是你自己創建的,你也可以操縱系統線程。

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

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

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

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

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

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

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

  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. }   

上述程序的結果是:

 

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

#p#

第二種方式是創建Thread類的子類并在子類中實現run方法,或在實現runnable的類中實現run方法,并將這個實現傳遞給Thread的構造函數。

你可能會問有什么區別。Java編程語言僅支持單一繼承。如果你設計的調用是除了Thread以外的其它類,你可以是你的類實現Runnable,而它可以是你的作業被執行。否則,你定義Thread的子類來運行你的Run方法,在處理過程中不再添加其它操作。

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

  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. }   

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

【編輯推薦】

  1. 專題:Java實用開發全集_51CTO.COM
  2. Java開發者盛宴:JavaOne 2009技術前瞻
  3. http://developer.51cto.com/art/200904/119400.htm
  4. Flex連接Java EE的技術選擇
  5. 高手Java核心技術學習筆記
責任編輯:張燕妮 來源: Java研究組織
相關推薦

2022-05-27 08:16:37

Thread類Runnable接口

2010-07-20 16:13:25

Perl線程

2016-11-10 16:30:22

Java多線程

2012-02-29 13:26:20

Java

2009-06-29 18:00:05

Java多線程Runnable接口創建線程

2021-09-11 15:26:23

Java多線程線程池

2015-09-09 08:40:39

Java簡單入門

2022-03-30 07:52:10

IDEAGitJava

2011-04-14 13:27:53

Synchronize多線程

2024-03-06 09:11:34

2024-01-12 16:12:44

Java虛擬線程開發

2009-08-13 09:07:36

Java多線程

2023-06-08 07:48:03

Java線程池

2009-06-29 18:08:51

Java多線程join方法

2023-10-31 08:22:31

線程類型.NET

2009-04-27 13:15:04

多線程方法run()

2009-06-29 18:44:28

Java多線程Synchronize同步變量

2010-05-21 12:27:22

SVN使用教程

2015-03-24 16:29:55

默認線程池java

2022-06-15 07:32:35

Lock線程Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕av高清 | 久久99蜜桃综合影院免费观看 | 亚洲一二三区不卡 | 日韩在线不卡视频 | 国产精品久久一区二区三区 | 午夜激情免费视频 | 亚洲国产一区在线 | 日韩av电影在线观看 | 成人福利视频 | 国产成人精品免高潮在线观看 | 羞羞视频在线观看网站 | 欧美黄 片免费观看 | 欧美国产精品一区二区三区 | 国产一区二区在线免费视频 | 四虎影院在线免费观看 | 蜜臀网| 天天躁日日躁狠狠躁白人 | 精品日韩一区二区 | 午夜爱爱网 | 黄a免费网络 | 天天成人综合网 | 精精国产xxxx视频在线播放 | 日本黄色大片免费 | 久久精品视频99 | 亚洲欧美日韩精品 | 久久精品99国产精品日本 | 国产精品久久久久久久7777 | 久久性色 | 在线观看中文字幕视频 | 一级a爱片久久毛片 | 亚洲欧美综合精品久久成人 | 国产美女精品视频 | 久久久久久久久久久一区二区 | 视频一区二区三区四区五区 | 夜夜爽99久久国产综合精品女不卡 | 色综合99| 9久9久9久女女女九九九一九 | 日本三级线观看 视频 | 日韩色视频 | 日韩精品久久一区二区三区 | 久久久亚洲 |