トップページ⇒tech
1001コメント288KB

★★Java質問・相談スレッド148★★

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2011/09/20(火) 09:07:19.06
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
★★Java質問・相談スレッド147★★
http://hibari.2ch.net/test/read.cgi/tech/1312958339/

次スレは>>950あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
09519442011/10/16(日) 20:32:22.86
>>950
インターフェース切る時の話だったか。
未知の概念じゃなくて安心した。�d
0952デフォルトの名無しさん2011/10/16(日) 20:37:21.43
ロジック間の依存性を低く抑えてるのは確かだが、逆転してるという表現には違和感が……
0953デフォルトの名無しさん2011/10/16(日) 20:43:25.13
それは中小という言葉を使ってはいるもののインターフェースの話だよな。
0954デフォルトの名無しさん2011/10/16(日) 20:53:57.92
本当に理解して説明してるのか怪しい
0955デフォルトの名無しさん2011/10/16(日) 20:54:45.49
synchronizedブロックが理解できないので誰か教えてください。

あれは、ブロック内の処理を実行中に
別のスレッドがそのブロックの処理を実行した場合、
後から来たスレッドを待機させる処理、という理解で良いのでしょうか。

だとすると、パラメータとして引き渡しているインスタンスは
何の役割を果たしているのでしょうか。
0956デフォルトの名無しさん2011/10/16(日) 21:11:06.46
ロック
0957デフォルトの名無しさん2011/10/16(日) 21:47:36.13
えーと

synchronizedブロックは、
ブロック内の処理を実行中、渡されたインスタンスをロックする処理、なのでしょうか。

他のスレッドの処理が待機するのは、
同一synchronizedブロックに入ったときではなく、
パラメータとして引き渡されたインスタンスへアクセスを試みたとき、
となるのでしょうか。
0958デフォルトの名無しさん2011/10/16(日) 21:52:19.04
マンコ
0959デフォルトの名無しさん2011/10/16(日) 21:54:17.99
インスタンスはあくまでキーと考える
同一のキーを使用して複数のスレッドが同時にロックを取得することはできないので、
他のスレッドはsynchronizedの入り口で待たされるわけです
0960デフォルトの名無しさん2011/10/16(日) 21:57:30.79
synchronizedで渡されたオブジェクトは、
そのオブジェクトがどんな実装を行っているものかは関係なく、
単なるマーカー的なもの。
だから、一貫して使っていれば、どこの馬の骨ともわからぬオブジェクトを使ってよい。

なお、synchronizedでガードする必要があるのは、処理ではなくデータ。
基本的には、ガードしたいオブジェクトへの全てのアクセスに対し、
同じオブジェクトでガードしていることが必要
(ピギーバッキングで微妙なこともできるかもしれないけど)
0961デフォルトの名無しさん2011/10/16(日) 21:57:42.52
仕様に関することは、仕様を自分できちんと読んだ方がいいぞ
0962デフォルトの名無しさん2011/10/16(日) 22:03:24.98
といっても馬鹿には無理だけどなw
0963デフォルトの名無しさん2011/10/16(日) 22:11:19.90
特定のオブジェクトへのアクセスを同期化するために
そのオブジェクトへのアクセスをロックってあんまりしないよね
だいたい一連の処理を分割させないために適当に一つ選んでロックに使う
0964デフォルトの名無しさん2011/10/16(日) 22:19:57.70
そりゃそうだ。
そのインスタンスのpublicメソッドに
synchronizedつけとけって話になるからな
0965デフォルトの名無しさん2011/10/16(日) 22:34:25.22
難解。

synchronized処理に渡されたインスタンスは、
そのブロックが抜けるまでキーとして保持される。

synchronized処理に渡されたインスタンスがすでにキーとして存在する場合、
そのスレッドはキーが開放されるまで待機する。

ゆえに、全く別の場所で実行されたsynchronizedでも、
渡されたインスタンスが同一ならば後発側が待機させられ、
同じ場所で実行されたsynchronizedでも、
渡されたインスタンスが違うならば並行して動作する、ということでしょうか。


馬鹿だから無理です、って言ったら明日からPowerd by 無職ですので。
多少は無理せねばならんのがつらいところです。
0966デフォルトの名無しさん2011/10/16(日) 22:38:19.25
マルチスレッドでファイル操作する時とか、
インスタンスメソッドでsynchronizedが付いてるのとか良く見るな
0967デフォルトの名無しさん2011/10/16(日) 22:41:38.04
>>965
お前には無理
0968デフォルトの名無しさん2011/10/16(日) 22:42:02.81
あんまり粒度の小さい操作をsynchronizedにしても
どうせ使うときに外からロックすることになるから大して意味ないけど
0969デフォルトの名無しさん2011/10/16(日) 22:57:41.67
C#の場合、Stack<Sprite> にSpriteを継承したものならなんでも突っ込めるけど、
Javaではできないじゃん?

どうすりゃいいの?
0970デフォルトの名無しさん2011/10/16(日) 23:06:23.93
どういうこと?
↓これはコンパイル通るけど、こういうのじゃダメなの?

 List<List> list = new ArrayList<List>();
 list.add( new ArrayList<String>() );
0971デフォルトの名無しさん2011/10/16(日) 23:09:14.05
できるんだからできないじゃん?って言わなければいいじゃん
0972デフォルトの名無しさん2011/10/16(日) 23:21:38.46
C#ではWPFは全然流行らなくて結局WIN FORMでやるのが正解だって聞いたんですけど本当ですか?
0973 ◆QZaw55cn4c 2011/10/16(日) 23:24:05.29
>>969
うまくいかないと判断したコードを http://ideone.com/ に貼れば答えがでてくるかも
0974デフォルトの名無しさん2011/10/16(日) 23:29:42.40
今日の情報処理技術者試験受けた奴居る?
0975デフォルトの名無しさん2011/10/16(日) 23:33:36.27
>>949
0976デフォルトの名無しさん2011/10/17(月) 13:42:39.59
クラスを任意の文字列で宣言することってできますか?
例えばsampleクラスのオブジェクトを作成する際に

Sample args[0] = new Sample();

という形で作成したいんですが…
0977デフォルトの名無しさん2011/10/17(月) 15:00:21.54
Class.forName(String)じゃだめなん?
0978デフォルトの名無しさん2011/10/17(月) 15:26:24.11
変数名を任意の文字列でやんのは無理じゃね?

一番近いのはMap<String, Sample>か?
0979デフォルトの名無しさん2011/10/17(月) 17:07:08.15
Java ってインスタンスのラベルって実行時に残ってるんだっけ?
0980デフォルトの名無しさん2011/10/17(月) 17:55:34.74
インスタンスのラベルって何?
0981デフォルトの名無しさん2011/10/17(月) 18:54:52.03
オブジェクトと言うべきか。

Sample sample = new Sample();

ってやったときの、 sample って文字列がバイトコードに残ってるかって話。
0982デフォルトの名無しさん2011/10/17(月) 19:07:52.17
マンコ
0983デフォルトの名無しさん2011/10/17(月) 19:11:50.65
仕様知ってるわけじゃないけど、変数名分からなければデバッグ時に変数ウォッチできないんじゃね?
ということでデバッグ付きコンパイルでは残っているに一票。
リフレクションとかで引っ張ってこれるわけじゃないんでデバッグなしだと消えるんじゃ?
0984デフォルトの名無しさん2011/10/17(月) 19:46:24.30
仕様云々以前にデコンパイルやったことないのか?
0985デフォルトの名無しさん2011/10/17(月) 19:48:49.47
.netなら変数そのままだな
0986デフォルトの名無しさん2011/10/17(月) 21:02:55.27
次スレよろ
0987デフォルトの名無しさん2011/10/17(月) 22:21:35.18
>>981
javapでggr
0988デフォルトの名無しさん2011/10/17(月) 22:40:33.86
>>721
0989デフォルトの名無しさん2011/10/18(火) 00:59:42.03
コンパイルのオプションで変わるだろ。
例えばEclipseで作ったclassと、単純にjavac叩いてできたclassをjadにでも突っ込んでみるといい。
0990デフォルトの名無しさん2011/10/18(火) 03:15:07.38
文字列がバイトコードに残るかどうかしか訊いてません
0991デフォルトの名無しさん2011/10/18(火) 03:20:02.69
>>990は日本語読解力がなさすぎ
0992デフォルトの名無しさん2011/10/18(火) 03:38:17.36
Dukeの朝は一杯のJavaの味噌煮から始まる。
そしてJVMの帳が下りる頃、Dukeは心地よい眠りに就くのだ。
0993デフォルトの名無しさん2011/10/18(火) 05:52:05.57
>>984
そもそもデバッグなしコンパイルをやったことがありません。
0994デフォルトの名無しさん2011/10/18(火) 06:38:15.13
>>981
ローカル変数名はコンパイルするとスロット番号による管理に置き換わる。
フィールド変数名はコンパイルするとコンスタントプールへの
インデックス値による管理に置き換わる。

実行時のリフレクションで名前アクセスできるのはフィールド値だけ。

これで答えになったかな
0995デフォルトの名無しさん2011/10/18(火) 09:01:07.37
981じゃないけどさんきゅー
0996デフォルトの名無しさん2011/10/18(火) 12:36:33.06
じすれ
0997デフォルトの名無しさん2011/10/18(火) 12:39:09.40
じすれ
0998デフォルトの名無しさん2011/10/18(火) 12:39:24.37
じすれ
0999デフォルトの名無しさん2011/10/18(火) 12:39:54.93
じすれ
1000デフォルトの名無しさん2011/10/18(火) 12:40:09.37
埋めるな馬鹿
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。