- PR -

スレッド起動後にメインで作成したオブジェクトは別スレッドから参照できますか?

1
投稿者投稿内容
カブトムシ子太郎
会議室デビュー日: 2006/04/12
投稿数: 16
お住まい・勤務地: 横浜
投稿日時: 2006-04-12 22:24
別スレッドのオブジェクト参照って可能ですか?

メインの処理から、スレッドを一つ立てます。

メインの処理と、スレッドから共通で参照できるような
String文字列を格納したArrayListオブジェクトを作りたいと考えてます。

メイン側では、共通に参照するArrayListオブジェクトに、
データを追加したり、削除したりしています。

スレッド側では、そのArrayListオブジェクトを常にループさせて、
共通のArrayListオブジェクトの中のString文字列を
常にに出力させたいと考えてます。

簡単なサンプルを作成して、試しましたがうまく参照しません。
スレッドを起動すると、メイン側の処理でいくらArrayListオブジェクト
にデータを入れたりしても、
スレッド側では、参照されないということはありますか?

知ってるかたいましたら、お願いします。


[ メッセージ編集済み 編集者: 未記入 編集日時 2006-04-12 22:26 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-04-12 22:27
排他処理のタイミングが問題になることはありますが、スレッド間で同一のオブジェクトを
参照することはもちろん可能です。おそらくコードになんらかの問題があると思うので、
差し支えない範囲で載せてみてはどうでしょうか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-04-12 23:37
コード:
public class MyThread extends Thread{
    private List list;

    public MyThread(List list){
        this.list = list;
    }

    public void run(){
        //何かしらの処理
    }
}

public class Main{

    public static void main(String[] args){
        List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");

        Thread thread = new MyThread(list);
        thread.start();

        //listをどこかに渡す
    }
}



これで参照できるのが確認できると思います。
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-04-13 00:48
複数のスレッドから同一のオブジェクトを参照するのは、何の問題もありません。
ただし、
引用:

メイン側では、共通に参照するArrayListオブジェクトに、
データを追加したり、削除したりしています。

スレッド側では、そのArrayListオブジェクトを常にループさせて、
共通のArrayListオブジェクトの中のString文字列を
常にに出力させたいと考えてます。


これをそのまま実現しようとすると、排他処理がかなり面倒なことになります。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-04-13 01:25
すみません、質問の意味を間違えていました。
追加・削除側のスレッドと、参照用の別スレッド間で、
同一のリストに対する処理をアトミックに行いたい場合は、
それぞれの操作にsynchronized節を使用しましょう。
カブトムシ子太郎
会議室デビュー日: 2006/04/12
投稿数: 16
お住まい・勤務地: 横浜
投稿日時: 2006-04-13 13:35
ありがとうございました。
なんとか解決できましたが、別の問題が発生しました。
スレッドを新規にたちあげたので、
とりあえず、この問題は大丈夫です。

返信してくださったみなさんありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)