Javaスレッド使用入門(1)
3740 ワード
この文書はJavaスレッドで使用される入門レベルのチュートリアルです.Javaプラットフォームは最初からマルチスレッド環境として設計されており、マルチスレッドのメリットはプロセッサリソースを十分に利用し、より迅速なタスクの完了を保証することです.
Javaプラットフォームは最初からマルチスレッド環境として設計されている.メインプログラムが実行されると、破片収集やイベント処理などの他のジョブはバックグラウンドで行われます.本質的には、これらのジョブはスレッドだと考えることができます.システム管理スレッドですが、いずれにしてもスレッドです.スレッドを使用すると、相互に独立したジョブを定義でき、相互に干渉しません.システムはこれらのジョブをCPUに入力または出力することを交換し、外部から見ると同時に動作しているようです.
プログラムで複数のジョブを処理する必要がある場合は、複数のプロセスを使用することもできます.これらのプロセスは、自分で作成したり、システムスレッドを操作したりすることができます.
これらのマルチジョブ処理を行うには、いくつかの異なるクラスまたはインタフェースを使用します.
java.util.Timerクラスjavax.swing.TimerクラスThreadクラスRunnableインタフェース
簡単なジョブでは、通常繰り返しが必要です.javaを使用することができます.util.Timerクラスは「半秒ごとに」と教えてくれます.注:ほとんどのシステム・インスタンスはミリ秒を使用します.半秒は500ミリ秒です.
ティマーが実現したい任務はjavaです.util.実行方法には、実行するタスクが含まれているTimerTaskインスタンスで定義されています.これらはHiクラスで実証され、文字列「Hi」がEnterキーを押すまで画面に繰り返し表示されます.
回転元:http://developer.51cto.com/art/200906/130602.htm
Javaプラットフォームは最初からマルチスレッド環境として設計されている.メインプログラムが実行されると、破片収集やイベント処理などの他のジョブはバックグラウンドで行われます.本質的には、これらのジョブはスレッドだと考えることができます.システム管理スレッドですが、いずれにしてもスレッドです.スレッドを使用すると、相互に独立したジョブを定義でき、相互に干渉しません.システムはこれらのジョブをCPUに入力または出力することを交換し、外部から見ると同時に動作しているようです.
プログラムで複数のジョブを処理する必要がある場合は、複数のプロセスを使用することもできます.これらのプロセスは、自分で作成したり、システムスレッドを操作したりすることができます.
これらのマルチジョブ処理を行うには、いくつかの異なるクラスまたはインタフェースを使用します.
java.util.Timerクラスjavax.swing.TimerクラスThreadクラスRunnableインタフェース
簡単なジョブでは、通常繰り返しが必要です.javaを使用することができます.util.Timerクラスは「半秒ごとに」と教えてくれます.注:ほとんどのシステム・インスタンスはミリ秒を使用します.半秒は500ミリ秒です.
ティマーが実現したい任務はjavaです.util.実行方法には、実行するタスクが含まれているTimerTaskインスタンスで定義されています.これらは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.println("Hi");
}
};
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では、スレッドが1つ実行されている限り、プログラムは終了しません.これにより、キャンセルが呼び出され、他のスレッドが実行されない場合、プログラムは終了する.フラグメント収集プログラムなどのシステムスレッドが実行されています.これらのシステムスレッドはバックグラウンドスレッドとも呼ばれる.バックグラウンドスレッドの存在は、実行環境が閉じられることに影響しません.バックグラウンドスレッド以外では、実行環境が閉じられないことを保証します.Javax.swing.Timerクラスとjava.util.timerクラスの動作は似ていますが、いくつかの違いに注意する必要があります.第一に、実行されるジョブはActionListenerインタフェースの実装によって定義される.第二に、ジョブの実行はjavaのようにイベント処理スレッドの内部で行う.util.Timerクラスはその外部にあります.Swingコンポーネントセットがどのように設計されているかにかかわるため、これは重要です.Swingに慣れていない場合は、Javaプログラムで使用できるグラフィックコンポーネントのセットです.Swingは設計プロセスによって単一スレッドと呼ばれている.これは、Swingクラスの内部コンテンツへのアクセスが単一スレッドで完了する必要があることを意味します.この特定のスレッドはイベント処理スレッドです.このように、たとえばLabelコンポーネントの文字を変更したい場合は、JlabelのsetTextメソッドだけを呼び出すことはできません.逆に、setText呼び出しがjavaxであるイベント処理スレッドで発生していることを確認する必要があります.swing.Time系の役に立つところ.この第2のケースを説明するために、次のプログラムは増加したカウンタの値を表示します.美半秒カウンタの数値が増加し、新しい数値が表示されます.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();
}
}
上記のプログラムの結果は、万が一簡単な繰り返し作業ではない場合、javaです.lang.Thread類が役に立ちました.基本機能を自分で制御できます.Threadのサブクラスを作成することで、システムを離脱させ、他のプログラムの実行を阻害することなく、ネットワークからファイルを読み取るなど、長時間実行するジョブを行うことができます.このような長時間実行されるジョブはrunメソッドで定義されます.詳細については、Java環境のインストール構成、Solarisの基礎知識の入門、Javaプログラミング開発マニュアルのトピック、またはディスカッショングループのディスカッションを参照してください.回転元:http://developer.51cto.com/art/200906/130602.htm