メニュー

ループ処理
条件文
値の受け渡し
static修飾子

配列の作成
ArrayListを使う
ArrayListと配列の変換

ファイル関係
ファイル読み込み
ファイル書き込み
オブジェクトのシリアライズ処理
バイナリファイルの入出力

今日の日付の取得

クラス
インターフェース

例外処理

スレッド関係
スレッド処理
スレッド処理の終了を待つ
スレッド間の同期処理

JDBCでMySQLに接続

Swing
フレームを表示
ボタンを配置
トグルボタンを配置
チェックボックスを配置
コンボボックスを配置
ラジオボタンを配置
リストを配置
プログレスバーを配置
テーブルを配置
パネルを配置
メニューバーを配置

JSP
スクリプティング
JavaBeansの利用
POSTデータ取得
Servletからリクエストデータ取得
jsp:forwardタグ
JSP Servlet JavaBeans連携

Servlet
Servletを作成
Postデータ取得

JSF
JavaBeansを利用
dataTableを利用
ボタンにイベントを追加
画面遷移
selectOneListbox
selectBooleanCheckbox

binding
selectManyListbox(bindingで配置)

Struts
Strutsを利用する

トップ
E-Mail
xml

ASP.Netのお勉強
VB.Netのお勉強
phpのお勉強
Excel マクロ・VBAのお勉強
ASP.Netで掲示板を作成しよう
AJAXのお勉強
Webデザインのお勉強
連想書籍検索
世界の観光地検索
路線図
総合サイトCocoaLiz

Valid HTML 4.01 Transitional

スレッド間の同期処理@Java

スレッド同期処理を行います。

カウントの値を1ずつ増やしていく処理を行うスレッドを作成します。
threadAとthreadBを作成します。

スレッド間の同期処理を行わないと、カウントの値がおかしくなります。
以下の処理では、最終的にカウント値は200となりますが、
同期処理を行わないと、カウント値は200となりません。

そこで同期処理を行います。
カウント値を行うメソッドcountUpにsynchronizedを付与します。
これにより、このメソッドはスレッド間で同期が行われ、
排他処理が行われます。


public class Main {

    private static int count = 0;

    public static void main(String[] args) {

        //スレッドA作成
        Thread threadA = new Thread(new Runnable() {
            public void run() {
                for (int i=0 ;i<100 ;i++) {
                    countUp(10);
                }
            }
        });

        //スレッドB作成
        Thread threadB = new Thread(new Runnable() {
            public synchronized void run() {
                for (int i=0 ;i<100 ;i++) {
                    countUp(15);
                }
            }
        });

        //スレッドAをスタート
        threadA.start();

        //スレッドBをスタート
        threadB.start();

        try {
            System.out.println("スレッド実行中・・・");
            
            //スレッドの終了を待つ
            threadA.join();
            threadB.join();

            System.out.println("スレッド終了");
            System.out.println(String.valueOf(count));
        } catch(Exception ex) {
            System.err.println(ex.getMessage());
        }
    }

    //カウントアップ処理
    //引数は、スリープの間隔(ms)
    private static synchronized void countUp(int interval) {
        int tempCount = count;
        
        //スリープ処理
        try {
            Thread.sleep(interval);
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        count = tempCount + 1;
    }
}




Copyright (C) Javaのお勉強. All Rights Reserved.