-1

私はJavaを学んでいる初心者です。今、質問があります。誰かが解決するのを手伝ってくれませんか? :)

ハッシュマップ変数を保持する Server という名前のクラスがあり、send() と receive() という名前の 2 つのメソッドがあります。2 つのメソッドを同時に実行したい。send() メソッドは hashmap 変数を使用し、receive() メソッドは hashmap 変数を変更します。

それを解決するのを手伝ってください。どうもありがとう!

4

5 に答える 5

1

送信スレッドと受信スレッドを生成するメイン スレッドで HashMap を定義します。競合状態に陥らないように、必ず SynchronizedMap を使用してください。

于 2013-05-03T05:29:08.850 に答える
1

使用できますCollections.synchronizedMap(new HashMap());

編集 1: コード テンプレート

public class Server
{
    private static Map<String,String> map = Collections.synchronizedMap(new HashMap<String, String>());

    public void send()
    {
        //
        // Do some operation using map variable
    }

    public void receive()
    {
        // change the map variable as you want
        //
    }
}
于 2013-05-03T05:28:02.870 に答える
0

CONcurrentHashMapを使用する

複数のスレッドをブロックすることなく、複数のスレッドから Map を同時に変更できます。

于 2013-05-03T05:31:21.993 に答える
0

アイテムはデフォルトで共有されます。必要なのは、共有を制御し、2 つのスレッドが同時にそれを変更しようとするのを防ぐための何らかの形式のロックまたはミューテックスです。

または、 ConcurrentHashMapを使用することもできます

于 2013-05-03T05:28:42.400 に答える
0

2 つの解決策があります。最も簡単な方法は、スレッド セーフなハッシュマップ、つまり ConcurrentHashMap を使用することです。JVM が処理するので、同期の問題について心配する必要はありません。同じことについて Javadoc を調べてみるとよいでしょう。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html

もう 1 つの方法は、send() メソッドと receive() メソッド、またはハッシュマップを更新するメソッドの一部を同期することです。

于 2013-05-03T05:28:45.097 に答える