Javaのスレッドで並列処理を行う
目次
1. Threadクラス版
2. Runnableインターフェース版
3. スレッドの排他制御(synchronized)
1. Threadクラス版
Threadクラスを継承して2つのスレッドで並列処理を行います。
※「o」を出力するメインスレッド、「x」を出力する別スレッドの2つ。
// スレッドクラス class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 30; i++) { System.out.print('x'); } } } public class Main { // メインスレッド public static void main(final String[] args){ MyThread my = new MyThread(); // 別スレッドを開始する my.start(); for (int i = 0; i < 30; i++) { System.out.print('o'); } } }
結果 ※毎回、結果が異なります。
xxxxxxxoooooooooxxoooooooooooooooooxxxxxxxooooxxxxxxxx
2. Runnableインターフェース版
Runnableインターフェースを継承して2つのスレッドで並列処理。
※「o」を出力するメインスレッド、「x」を出力する別スレッドの2つ。
// スレッドクラス class MyRunnable implements Runnable { @Override public void run() { for (int i = 0; i < 30; i++) { System.out.print('x'); } } } public class Main { public static void main(final String[] args){ Thread my = new Thread(new MyRunnable()); // 別スレッドを開始する my.start(); for (int i = 0; i < 30; i++) { System.out.print('o'); } } }
結果 ※毎回、結果が異なります。
ooxxxxooooooooxxxxxxxxxxxxooooooxxxxxxxxxxxxxxoooooo
3. スレッドの排他制御(synchronized)
synchronizedで囲まれたブロック、synchronized修飾子があるメソッドは「排他制御」で複数のスレッドで同時に実行する事は出来ません。実行できるのは1つのスレッドのみです。
synchronizedで囲まれたブロック
void Method() { synchronized (this) { ... } }
synchronized修飾子があるメソッド
synchronized void Method() { ... }
スポンサーリンク
関連記事
前の記事: | Javaでデータベース操作(検索/更新系SQL/プリペアドステートメント/トランザクション) |
次の記事: | Javaの手書きSwing/JavaFXでGUIアプリケーション [Hello World !] |
公開日:2018年05月09日
記事NO:02650