soraなりの日々 - fc2 -

こころにひっかかったもの

[ruby,jruby]thread いろいろ

なんとなくの第2弾。
jruby 含め、rubyjavathread
じゃれてみた。
(これまた、すんげー、しょーもないことしかしてないけどね。。。)

このエントリーをはてなブックマークに追加
まずは、javathread

ソース:SampleThread.java
public class SampleThread extends Thread {

  public SampleThread(String name) {
    super(name);
  }

  public static void main(String[] args) {
    SampleThread thread1 = new SampleThread("test 1スレッド");
    SampleThread thread2 = new SampleThread("test 2スレッド");

    thread1.start();
    thread2.start();
  }

  public void run() {
    for (int i=0; i<10; i++) {
      System.out.println(this.getName() + " : " + i);
      try {
        sleep(500);
      } catch (InterruptedException e) {
      }
    }
  }
}


んで、次が ruby

ソース:sample_thread.rb
def count_up(n)
  lambda do |n|
    0..10.times {|i|
      puts n + " : " + i.to_s
      sleep 0.5
    }
  end
end

c1 = count_up("test 1スレッド")
t1 = Thread.new(c1) do |c|
  c.call "test 1スレッド"
end

c2 = count_up("test 2スレッド")
t2 = Thread.new(c2) do |c|
  c.call "test 2スレッド"
end

t1.join
t2.join
(※ lambda とか使ってみた。けど、もっと短くなりそうだな。。。)


そして、そして。
jrubyjava の thread を使ってみる。
見事にキモい fusion コードのできあがり!

ソース:sample_thread_jruby.rb
require 'java'

class SampleThread < java.lang.Thread
  def initialize(name)
    super name
  end
 
  def run
    0..10.times {|i|
      puts getName + " : " + i.to_s
      sleep 0.5
    }
  end
end

SampleThread.new("test 1スレッド").start
SampleThread.new("test 2スレッド").start

ruby の楽さの中にキラリと光る java のめんどくささ、かな。
オレ、好きだぜ!こういうの。

で、ほんとは ruby のこういうのを知ったのが、
きっかけだったような、、、

-----------------------
11.5 ネイティブスレッドを使った Ruby はない?

ネイティブスレッドは、現在の GC (ガベージコレクション……
自動メモリ回収) の実装と非常に相性が悪いため実現していません。
またインタプリタおよび基本ライブラリには C レベルで
スレッドセーフでない部分がありますのでその部分を
洗いだして修正する必要もあります。
-----------------------

ちょっと見てみようと思ったんだけど、
この程度のコードじゃサッパ解りませんでした(^^;

まー、thread を使わなきゃいけないようなのに
出くわしたら、jruby 使って java の vm さんに任せて
しまった方が良いってことかね。
jruby の作者の charles もたしかそんなこと言ってたし。。。)

関連記事:
 [ruby,jruby]グラフを作成してみた
このエントリーをはてなブックマークに追加

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://sora2hs.blog70.fc2.com/tb.php/365-b5ac7f38
この記事にトラックバックする(FC2ブログユーザー)