Javaを見直した

いい加減マルチスレッドを勉強しようと、会社で結城先生の増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編を読んでいて思ったのですが、Java良い。めちゃくちゃわかりやすい。C++でさっぱりわからなかったセマフォだとかミューテックスとか言ってるのが、すげーすんなり頭に入ってくる。
 さすが言語仕様レベルでスレッドが入ってるだけのことはあるわ。見直した。まぁ、それでもC#の方が良いとは思いますがw

それはそれとして、これからプログラムを勉強する人は、もうJavaC#から初めていいんじゃないだろか。ゲーム用途ならC#にはXNAもあるし。話によるとWindowsなら十分それなりのSTGとか作れるぐらいパフォーマンス出るらしいですし。360で動かすとボロボロらしいですがw
 まぁ、C#触ると、C/C++なんて使いたくなくなりますけどね。会社でちょっとしたサーバー/クライアントを作ったんですが、サーバーはゲーム機なんでC++。クライアントはPCなんでC#で作ったんですが、C#のコードの短さとシンプルさに泣いた。

BMW開発が終わったら、マリ打ての頃から育て続けた現ゲームエンジンを完全新調しようと思ってるんだけど、C++で作らなくても良いかな−、と思っていたり。BMWぐらいのゲームがXNAで動いちゃうなら、XNAに移っちゃおうかなー、って感じ。たぶん、動くと思ってますが60fpsいらんし。
 アニメの部分だけ移植して実験してみようかなと、思っていたりいなかったり。

しかし、まだマルチスレッドプログラムのイメージが作りきれない……。
 関数中で別の関数を呼び出すと、呼び出した関数が別スレッドで動いてるというイメージがなぜか拭いきれない。そんなわけは無く呼び出した関数と同じスレッドで実行されてるんだよ。だから、呼び出した関数中でwaitとかnotifyしていいはずなんだ。シーケンス図がいけない気がするんだ。あれのせいで分断される気がする。
 俺の中でスレッドと関数の概念がどうも混ざってる。スレッドは関数を指定して起動するんで、指定した関数=スレッドと思っちゃうんだよな。そうじゃなくて、スレッドは関数の実行者であって、関数ではないんだよ!
 と、頭ではわかってるんだが、身体がついて来てない。一度、それなりのソフトを作ってみないことには、実感できなそうだなー。