タグ

2012年8月31日のブックマーク (5件)

  • Java で簡単ソケットプログラミング

    必要があって java でのソケットプログラミングについて調べたのですが、C で書くのと比べると ものすごく簡単にプログラミングできてしまいます。おまけに java はクラスライブラリが充実しているので、 取得したバイト列の扱いもものすごく楽に行えます。もう、C ではめんどうくさくてプログラミングできないかもしれないと 思ってしまったくらいです。 コード量が少ないので、ソースを読んでもらった方が早いのですが、簡単に説明させていただきます。 なお、以下の説明は Java 2 SDK, Standard Edition version 1.4.0(以下 JDK 1.4) の環境で行っています。 ソケットプログラミングに必要なクラス サーバ側ソケットは java.net.ServerSocket を使います。コンストラクタの形式は色々とあるようですが、 以下ではポート番号のみを指定するコンスト

  • syboos.jp

  • 同期コレクションと並列コレクション - A Memorandum

    同期コレクション 同期コレクションのイテレーション 同期コレクションのプット・イフ・アブセント 並列コレクション ConcurrentHashMap CopyOnWriteArrayList CopyOnWriteArraySet 同期コレクション 同期コレクションは、JDK1.2以降で追加された Collections.synchronizedXxx 系のファクトリメソッドから同期ラッパークラスを作成します。 List<String> list = Collections.synchronizedList(new ArrayList<String>()); Set<String> s = Collections.synchronizedSet(new HashSet<String>()); Map<Long, String> m = Collections.synchronizedMap

    同期コレクションと並列コレクション - A Memorandum
  • HashMapと無限ループとsynchronized - 谷本 心 in せろ部屋

    「HashMapのputとgetを同時に行うと、無限ループが発生する」という事は Javaエンジニアな皆さんならご存知だと思います。 1. 無限ループの再現 まずは論より証拠、無限ループになることを確認してみましょう。 こんなテストコードを書けば、すぐに再現できます。 public void testHashMap_無限ループ() throws InterruptedException { final Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Runnable runnable = new Runnable() { public void run() { for (int i = 0; i < 1000000; i++) { int key = i % 10000; if (map.containsKey(ke

    HashMapと無限ループとsynchronized - 谷本 心 in せろ部屋
  • Javaの並列処理の基本

    前のエントリで激しい議論が続いていますが、置いてきぼりをくらって バーカンウターで退屈そうにしていらっしゃるお客様のために、基礎講座を。 synchronizedの基 同時に複数の人が編集作業をすると、あっというまにぐちゃぐちゃになってしまいます。 さっきまで10と書いてあったから、そこに1を足して11を書き込もう、としたらすでに値が12になっていた…。 そこでまぁいいや、と11と書き込むと、最後になって数字の辻褄があわなかったりするわけです。 マルチスレッドでの同期の問題のひとつはここにあります。 a += 1; という単純な式でさえ、実際にはaを読み出し、1を足し、格納するというステップから成っています。 その間に他のスレッドに読み出され、別の値を格納されたりするわけです。 「1度にいじるのはひとりだけにしてくれ!」そういいたくなりますね。たとえばここに、ボールをひとつ用意します。