Thread
日本語 | 細い線 |
英語 | thread |
ふりがな | すれっど |
フリガナ | スレッド |
スレッドを作るためのクラス。
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.lang.Thread。
スレッドを作る場合、このThreadクラスのサブクラスを作るか、Runnableインターフェイスの実装クラスを作る。
Threadクラスのrun()メソッドをオーバーライドし、start()メソッドを呼び出すことで、run()メソッドは別スレッドとして実行される。
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.lang.Thread。
スレッドを作る場合、このThreadクラスのサブクラスを作るか、Runnableインターフェイスの実装クラスを作る。
Threadクラスのrun()メソッドをオーバーライドし、start()メソッドを呼び出すことで、run()メソッドは別スレッドとして実行される。
参考サイト
// Sample.java
public class Sample
{
public static void main( String[] args )
{
TestThread thread1 = new TestThread();
TestThread thread2 = new TestThread();
// toString()の結果を出力しておきます。
System.out.println( thread1.toString() );
System.out.println( thread2.toString() );
// Thread[Thread-1,5,main]
// Thread[Thread-2,5,main]
// そして実行。
thread1.start();
thread2.start();
// Thread[Thread-1,5,main] : 0 : 2
// Thread[Thread-2,5,main] : 0 : 6
// Thread[Thread-1,5,main] : 1 : 8
// Thread[Thread-2,5,main] : 1 : 6
// Thread[Thread-1,5,main] : 2 : 10
// Thread[Thread-2,5,main] : 2 : 6
// Thread[Thread-2,5,main] : 3 : 1
// Thread[Thread-2,5,main] : 4 : 7
// Thread[Thread-1,5,main] : 3 : 10
// Thread[Thread-2,5,main] : 終了。
// Thread[Thread-1,5,main] : 4 : 10
// Thread[Thread-1,5,main] : 終了。
// このように、ふたつとも関係なく実行されます。
// そして、main()メソッドは先に終了します。
System.out.println( "main() : 終了。" );
// main() : 終了。
// ↑これは、上のスレッドでの出力のどこかに
// 挟まれて出力されると思います。
}
}
/**
* 別スレッドとして実行するためのクラス。
*/
class TestThread extends Thread
{
/**
* Threadクラスのrun()メソッドを
* オーバーライドしたメソッド。このメソッドが
* 別スレッドとして呼び出されます。
*/
public void run()
{
// 5周ループします。
for( int iF1 = 0; iF1 < 5; ++iF1 )
{
// 待機秒数を作ります。
int sleepSecond = ( ( (int)( Math.random() * 10 ) ) + 1 );
// 自分自身のtoString()と、カウンター、それと待機秒数を出力します。
System.out.println( this.toString() + " : " + iF1 + " : " + sleepSecond );
try
{
// ランダムで、1~10秒間待ちます。
sleep( sleepSecond * 1000 );
}
catch( InterruptedException e )
{
// sleep()メソッドが途中で中断されると
// InterruptedException例外が投げられます。
// 滅多にないですが。
e.printStackTrace();
}
}
// 終わりました。
System.out.println( this.toString() + " : 終了。" );
}
}
public class Sample
{
public static void main( String[] args )
{
TestThread thread1 = new TestThread();
TestThread thread2 = new TestThread();
// toString()の結果を出力しておきます。
System.out.println( thread1.toString() );
System.out.println( thread2.toString() );
// Thread[Thread-1,5,main]
// Thread[Thread-2,5,main]
// そして実行。
thread1.start();
thread2.start();
// Thread[Thread-1,5,main] : 0 : 2
// Thread[Thread-2,5,main] : 0 : 6
// Thread[Thread-1,5,main] : 1 : 8
// Thread[Thread-2,5,main] : 1 : 6
// Thread[Thread-1,5,main] : 2 : 10
// Thread[Thread-2,5,main] : 2 : 6
// Thread[Thread-2,5,main] : 3 : 1
// Thread[Thread-2,5,main] : 4 : 7
// Thread[Thread-1,5,main] : 3 : 10
// Thread[Thread-2,5,main] : 終了。
// Thread[Thread-1,5,main] : 4 : 10
// Thread[Thread-1,5,main] : 終了。
// このように、ふたつとも関係なく実行されます。
// そして、main()メソッドは先に終了します。
System.out.println( "main() : 終了。" );
// main() : 終了。
// ↑これは、上のスレッドでの出力のどこかに
// 挟まれて出力されると思います。
}
}
/**
* 別スレッドとして実行するためのクラス。
*/
class TestThread extends Thread
{
/**
* Threadクラスのrun()メソッドを
* オーバーライドしたメソッド。このメソッドが
* 別スレッドとして呼び出されます。
*/
public void run()
{
// 5周ループします。
for( int iF1 = 0; iF1 < 5; ++iF1 )
{
// 待機秒数を作ります。
int sleepSecond = ( ( (int)( Math.random() * 10 ) ) + 1 );
// 自分自身のtoString()と、カウンター、それと待機秒数を出力します。
System.out.println( this.toString() + " : " + iF1 + " : " + sleepSecond );
try
{
// ランダムで、1~10秒間待ちます。
sleep( sleepSecond * 1000 );
}
catch( InterruptedException e )
{
// sleep()メソッドが途中で中断されると
// InterruptedException例外が投げられます。
// 滅多にないですが。
e.printStackTrace();
}
}
// 終わりました。
System.out.println( this.toString() + " : 終了。" );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { TestThread thread1 = new TestThread(); TestThread thread2 = new TestThread(); // toString()の結果を出力しておきます。 System.out.println( thread1.toString() ); System.out.println( thread2.toString() ); // Thread[Thread-1,5,main] // Thread[Thread-2,5,main] // そして実行。 thread1.start(); thread2.start(); // Thread[Thread-1,5,main] : 0 : 2 // Thread[Thread-2,5,main] : 0 : 6 // Thread[Thread-1,5,main] : 1 : 8 // Thread[Thread-2,5,main] : 1 : 6 // Thread[Thread-1,5,main] : 2 : 10 // Thread[Thread-2,5,main] : 2 : 6 // Thread[Thread-2,5,main] : 3 : 1 // Thread[Thread-2,5,main] : 4 : 7 // Thread[Thread-1,5,main] : 3 : 10 // Thread[Thread-2,5,main] : 終了。 // Thread[Thread-1,5,main] : 4 : 10 // Thread[Thread-1,5,main] : 終了。 // このように、ふたつとも関係なく実行されます。 // そして、main()メソッドは先に終了します。 System.out.println( "main() : 終了。" ); // main() : 終了。 // ↑これは、上のスレッドでの出力のどこかに // 挟まれて出力されると思います。 } } /** * 別スレッドとして実行するためのクラス。 */ class TestThread extends Thread { /** * Threadクラスのrun()メソッドを * オーバーライドしたメソッド。このメソッドが * 別スレッドとして呼び出されます。 */ public void run() { // 5周ループします。 for( int iF1 = 0; iF1 < 5; ++iF1 ) { // 待機秒数を作ります。 int sleepSecond = ( ( (int)( Math.random() * 10 ) ) + 1 ); // 自分自身のtoString()と、カウンター、それと待機秒数を出力します。 System.out.println( this.toString() + " : " + iF1 + " : " + sleepSecond ); try { // ランダムで、1~10秒間待ちます。 sleep( sleepSecond * 1000 ); } catch( InterruptedException e ) { // sleep()メソッドが途中で中断されると // InterruptedException例外が投げられます。 // 滅多にないですが。 e.printStackTrace(); } } // 終わりました。 System.out.println( this.toString() + " : 終了。" ); } }