X



★★Java質問・相談スレッド181★★
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
垢版 |
2018/02/10(土) 17:49:40.56ID:l9ZzjyKP
プログラミング言語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
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※

質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。

前スレ
★★Java質問・相談スレッド180★★
https://mevius.5ch.net/test/read.cgi/tech/1492780397/
0851デフォルトの名無しさん
垢版 |
2018/10/31(水) 12:34:18.73ID:6PFXXFSS
thisをロックするのとロック専用オブジェクトをロックするのは
性能の違いがあるんですか?
0852デフォルトの名無しさん
垢版 |
2018/10/31(水) 14:41:22.75ID:3SYFbLW8
>>851
thisはクラス外からも当然見えているわけで、他のクラスも同じオブジェクトを同時にロックしている可能性がある
どえせ内部的に同期してるんなら他のクラスが同時にアクセスしてくることは何の問題もないはずで、これは完全に無駄なブロックだ
クラス外から見えるオブジェクトをロックするのはパフォーマンスだけではなくてデッドロックの可能性を高める非常に悪い行為
0853デフォルトの名無しさん
垢版 |
2018/10/31(水) 15:22:21.60ID:6PFXXFSS
デッドロックの可能性は分かるんですが、
その性能の劣化というのは、クラス外でたまたまロックに使われていた場合、
待機時間が生じるから、ということですか?
待機時間以外に構造的に複雑なオブジェクトをロックすることでの性能劣化はありえますか?
0857デフォルトの名無しさん
垢版 |
2018/10/31(水) 17:20:43.08ID:6PFXXFSS
専用オブジェクトでロックしても結局プログラマーが入念にチェックする以外
無い気がするんですが合ってますか?
よく言われてるようなロック順序云々では解決しない気がするんですが
0858デフォルトの名無しさん
垢版 |
2018/10/31(水) 17:23:06.92ID:xpjrbgPR
Javaはいつかなくなるんですか
0861デフォルトの名無しさん
垢版 |
2018/10/31(水) 19:30:32.81ID:umCB7ism
俺のディスクの上で生き残る
0862デフォルトの名無しさん
垢版 |
2018/10/31(水) 19:48:34.38ID:umCB7ism
デッドロックと言えば、サーバをまたいだロックを掛けててデッドロックになった時は原因究明が大変だったなあ。
0863デフォルトの名無しさん
垢版 |
2018/10/31(水) 20:18:06.23ID:YzLC1QbG
>>857
外に漏らさなければ入念にチェックする範囲がクラス内だけに留まるだろ
外から見えるオブジェクトならそれを触ってる可能性のある範囲全てをチェックしなきゃいけない
0864デフォルトの名無しさん
垢版 |
2018/10/31(水) 21:04:23.41ID:6PFXXFSS
>>863
クラスA#method1() method3呼び出し
クラスA#method2()
クラスB#method3() method2呼び出し

この状況でmethod1,3を異なるスレッドが呼び出したらデッドロックになりうるのでは?
クラスA,Bがそれぞれ専用のロックオブジェクトを持っていて
method1,2,3の内部でロックオブジェクトでロックしているとして
0865デフォルトの名無しさん
垢版 |
2018/10/31(水) 21:13:55.51ID:umCB7ism
そういやJavaVMって実行時にデッドロックを見つけ出す機能はないのかな?
OSのファイルロックだと見つけてくれたりするよな。NFS絡むと無理だけど。
(あ、でも2プロセスでロック掛け合った場合だけかな?)
0866デフォルトの名無しさん
垢版 |
2018/10/31(水) 21:30:17.03ID:6PFXXFSS
デッドロックを通知する仕組みはあるようです。JConsole

安全なsynchronizedというものは、そのメソッドがどこから呼び出されているか、
どれを呼び出しているかというような依存関係で決まって、
単純な記述方法で安全性を確保する事はできないのではと思いました。
どのオブジェクトをロックしてもこの問題は残ります。
https://www.jpcert.or.jp/java-rules/lck07-j.html
これなんかもそうですが、ロック順序だけで解決できると考えてしまっていますが、
synchronizedブロック内のロジックが他のメソッドを呼び出している場合、
まだデッドロックが発生する可能性があると思います。
派生していくメソッド呼び出しのどこかにsynchronizedブロックがあれば。
もちろん、多くの場合、プログラムは様々なメソッドを呼び出します。
>>857はこの理解で正しいかという意味です
0868デフォルトの名無しさん
垢版 |
2018/10/31(水) 22:59:47.53ID:GrkkoIKB
>>864のケースで仮にAがthisをロックしていたとしたら、B#method3がA#method2を呼ばずともB#method3内で直接または間接的にAのロックを試みただけでデッドロックするだろう。
privateなロックオブジェクトを用いたからといってデッドロックの可能性はゼロにはならないが、thisを使うのに比べれば確実に可能性は低くなる。
あえてリスクの大きくパフォーマンスの低下する方を選択する積極的な理由がない。
0869デフォルトの名無しさん
垢版 |
2018/10/31(水) 23:05:48.35ID:VI6I+9K/
>>866
何を言いたいのか理解できないが、どこの誰がどんなタイミングでロックを取りに来ようとも、ロックの順番さえ守ってれば絶対にデッドロックは起こらないよ。
0870デフォルトの名無しさん
垢版 |
2018/10/31(水) 23:43:17.95ID:QZT9zuHU
DB などほとんどのアプリでは、デッドロックでタイムアウトする。
絶対に回避できない

ロックする順番は、2プロセスの場合、
プロセスAがX, Y、
プロセスBがY, X

3プロセスの場合、
プロセスAがX, Y、
プロセスBがY, Z、
プロセスCがZ, X
0872デフォルトの名無しさん
垢版 |
2018/11/01(木) 06:39:30.81ID:MRwfHAbj
>>870
バカにロックを使わせるな
って言う見本

せめて初歩の初歩ぐらい理解してからレスしろよ w
0873デフォルトの名無しさん
垢版 |
2018/11/01(木) 07:11:11.17ID:m171VN/W
>>869
ロックの順番を守る事ができないということです
ブロック内にメソッド呼び出しがあることは普通です
0874デフォルトの名無しさん
垢版 |
2018/11/01(木) 07:11:48.43ID:m171VN/W
>>868
>どのオブジェクトをロックしてもこの問題は残ります。
0875デフォルトの名無しさん
垢版 |
2018/11/01(木) 07:13:39.94ID:m171VN/W
現在している話は、普通のプログラムにおいてロックの順番を守る妥当な方法は存在しないという話です。
synchronizedブロック内でメソッド呼び出しがあった時点でそうなります。
それに対してロックの順番を守ればいいとかthisをロックしろとか言い続けているのは話が分かっていません。
0876デフォルトの名無しさん
垢版 |
2018/11/01(木) 07:17:18.61ID:m171VN/W
もう少し分かり易い説明を思いつきました。
ここにある問題は、synchronizedブロックで一旦ロック順序を守ったとしても、
そのブロック内から呼び出されているメソッド及びそこから派生的に呼び出されている全てのメソッドにおいて
synchronziedブロックを使う場合デッドロックが生じうるという問題で、
リファクタリング等において恒久的に懸念が残り続けるという問題です。
これは一時ロック順序を守ったコードを書いても解決しません。
0877デフォルトの名無しさん
垢版 |
2018/11/01(木) 07:20:14.51ID:m171VN/W
すみません、経験上凡人レベルの人に話しても理解されなくて、辛い思いをするだけです。
話を終わります。
0878デフォルトの名無しさん
垢版 |
2018/11/01(木) 07:36:25.75ID:PBz6MbCm
そうや。情報処理資格のテキストに書いてある。
楽観的とか、ああいうやつ

何も知らない奴が、ギャアギャア言ってるだけ
0880デフォルトの名無しさん
垢版 |
2018/11/01(木) 08:23:01.98ID:Tn1c1okn
例題とかじゃなくて、どういう時にロックが必要になるか考えて実際にやってみたらいいんじゃないか
そんな複雑なsynchronizedの使い方をしたことはしないだろう
0881デフォルトの名無しさん
垢版 |
2018/11/01(木) 09:20:12.40ID:AYHv18S/
>すみません、経験上凡人レベルの人に話しても理解されなくて、辛い思いをするだけです。
世間は俺のことを分かってくれない(馬鹿のFAQ)w
0882デフォルトの名無しさん
垢版 |
2018/11/01(木) 09:30:29.97ID:KWvf1ga0
ID:m171VN/Wは天才すぎる故に凡人レベルの嫉妬を買ってしまった
0883デフォルトの名無しさん
垢版 |
2018/11/01(木) 09:40:00.51ID:mQsUQM4b
いや本当。凡人レベルの人には話が通じませんよね。


という具合にみんなして同調しておけばいいのに。
0884デフォルトの名無しさん
垢版 |
2018/11/01(木) 09:41:09.33ID:VmLiOLMi
凡人にも理解出来る様に説明出来る能力を持ってるのが、天才の条件だな
説明出来ない人は紙一重の方
0885デフォルトの名無しさん
垢版 |
2018/11/01(木) 09:47:33.79ID:DtT8Cv0d
まあ責任と前提の問題だな
正常な頭してたらクラスAとクラスBが相互に密結合するような設計をすることはありえないから、
似た状況が起こりうるのはBがAに自身を登録してAがBをinterface経由で「コールバック」するようなパターンだろう
その場合、BのメソッドがAのコンテキストから呼び出されることはBを作る側は当然知っているはずで、Aを更に別のスレッドから呼ぶような基地外的行為をしないという人間としての最低限度の責任はB側にある
そしてA側はそのようなリスクのある拡張ポイントをなるべく作るべきではないし、やむを得ないときはドキュメントに明記するべき
0886デフォルトの名無しさん
垢版 |
2018/11/01(木) 10:30:23.17ID:Tn1c1okn
あれだ
スレッドを知った初心者が無駄に使いたくなってる状態に近いんじゃないか
0888デフォルトの名無しさん
垢版 |
2018/11/01(木) 11:38:29.67ID:mQsUQM4b
>>887
ありがとう。そんなスレがあったとは。正に俺のために作られたようなスレだな。

と、サラッと書けるくらいにならんといかんよ。現実がどうであれ。w
0890デフォルトの名無しさん
垢版 |
2018/11/01(木) 15:10:14.12ID:Nl3jEz8g
javaの資格のsilverやgoldはどの程度の実力で受かりますか?
デザインパターンやリファクタリングをちゃんと理解しているレベルなら余裕で受かる?
0891デフォルトの名無しさん
垢版 |
2018/11/01(木) 15:35:43.13ID:mUSj63Sn
>>890
シルバーはブロンズと変わらん
ゴールドはライブラリの使い方知ってればおけ
日付の計算とかスレッドとかコレクション
0892デフォルトの名無しさん
垢版 |
2018/11/01(木) 15:58:36.20ID:Nl3jEz8g
>>891
ゴールドもその程度で受かるのですか?
楽勝ですね。
じゃ逆にデザインパターンやリファクタリングをあまり理解していなくても受かるということ?
0893デフォルトの名無しさん
垢版 |
2018/11/01(木) 16:03:52.20ID:OxvwXsOa
受けようと思ったことすらないのでわからない。
0894デフォルトの名無しさん
垢版 |
2018/11/01(木) 16:11:52.48ID:Nl3jEz8g
職歴にプログラミングがないのでしかたなく資格でもアピールする必要があるのですが
Java資格はGoldを取るとして
あとなにがあったほうがよいでしょうか?
データベース関連やUML関連やネットワーク関連の資格ですか?具体的にはなにが印象いいでしょうか?
0895デフォルトの名無しさん
垢版 |
2018/11/01(木) 16:12:24.17ID:Nl3jEz8g
デザインパターン関連の資格ってないのかな?
0897デフォルトの名無しさん
垢版 |
2018/11/01(木) 16:33:52.56ID:Nl3jEz8g
デスペとデスペですか。
同じものなのになぜ2回も言うのですか。
0898デフォルトの名無しさん
垢版 |
2018/11/01(木) 16:41:11.79ID:RfEd9OxR
大事なことなので
0899デフォルトの名無しさん
垢版 |
2018/11/01(木) 17:12:47.17ID:Nl3jEz8g
そうですか。

なにか忘れてそうなのですが
プログラミングあるいは関連分野で、あったほうがいい資格はありませんか?
0900デフォルトの名無しさん
垢版 |
2018/11/01(木) 18:05:14.35ID:OxvwXsOa
わからない。資格何もなしで何十年も働いちゃったもので。
一時期は学校でC言語教えてたりもしたが、資格はなかった。
あ、一太郎も教えてたことあったよ。もちろん資格なしで。
0901デフォルトの名無しさん
垢版 |
2018/11/01(木) 19:13:26.95ID:Nl3jEz8g
>>900
無免許ですか。逮捕しますよw
一太郎は日本用のWordだと思うけどなんでそんなものが存在したの?
0902デフォルトの名無しさん
垢版 |
2018/11/01(木) 19:15:26.25ID:1Z/ZXoar
まあ実務をやる上では資格は特に必要ではない
ただ採用する立場だと資格ない奴とある奴ならある奴を取る
0904デフォルトの名無しさん
垢版 |
2018/11/01(木) 19:39:49.82ID:OxvwXsOa
>>901
なんでって、MS-DOS時代のWORDは漢字扱えなかったからじゃないか?
0905デフォルトの名無しさん
垢版 |
2018/11/01(木) 23:44:32.35ID:kQnTnj4P
ブロンズは持っても意味ないしシルバーもゴールドの受験資格みたいなもんだぞ。
そんで中身の言語部分はJVMSもJLSも一切読まなくても答えられる程度でどちらかと言うと
ありふれたライブラリの宣伝兼再確認みたいな内容。
0907デフォルトの名無しさん
垢版 |
2018/11/02(金) 16:44:03.61ID:TVanRjUQ
もしかしなくてもsilverとかより基本情報技術者取ったほうがいいんでしょうか
0908デフォルトの名無しさん
垢版 |
2018/11/02(金) 16:53:15.88ID:3EaYIZ29
当然
Javaの重箱の隅に付いてる食べカスの色知ってる奴よりIPアドレスの計算できる奴の方が遥かに役に立つ
0909デフォルトの名無しさん
垢版 |
2018/11/02(金) 17:17:06.84ID:0QIYfvOa
IPアドレスの計算って?
何か計算必要か?
0910デフォルトの名無しさん
垢版 |
2018/11/02(金) 21:03:28.28ID:mJ2e4zOQ
インターネットキングならIPアドレスの計算くらい朝飯前だよ
0911デフォルトの名無しさん
垢版 |
2018/11/02(金) 22:48:40.06ID:ejOlj3tt
サブネットマスクとかの話ちゃうの
0912デフォルトの名無しさん
垢版 |
2018/11/03(土) 00:34:57.85ID:8dUCHJOu
世の中に無駄なものなんかないよ
ジャヴァの資格もIPアドレスの計算も全て社会の役に立ってる
0913デフォルトの名無しさん
垢版 |
2018/11/03(土) 18:14:19.75ID:b5iwDuZ8
java11, 12にはくだらない機能しか入らないのか
0915デフォルトの名無しさん
垢版 |
2018/11/06(火) 00:08:12.73ID:GjqHOKec
for文ブロックの後にループカウンタ変数の値でif文を書きたい
でもループカウンタ変数のスコープの問題で使えない

for文実行前にカウンタ変数用意するのは悔しいし誤動作を招きそうな気がするのでやりたくない
for文の中にif文を書いちゃえばいいんだけど毎回実行されるのは無駄で気持ちが悪いしそもそも本来やりたいことと違う

これはどう解決すれば良いんでしょうか、初歩的ですいません……
0916デフォルトの名無しさん
垢版 |
2018/11/06(火) 00:14:58.15ID:ShoHBAGo
>>915
forループに入る前にループカウンタとは別の変数を用意して、ループの最後にカウンタの値をその変数にコピーするようにしよう
そうすればループカウンタをfor文の外で宣言しなくて済むし悔しくない
0917デフォルトの名無しさん
垢版 |
2018/11/06(火) 00:22:51.13ID:GjqHOKec
そもそもループカウンタを前に宣言はできませんでした(今までそんなんやろうと思わなかった……)
>>916
代入ならif評価よりは速そうですね、ありがとうございます
0918デフォルトの名無しさん
垢版 |
2018/11/06(火) 01:56:42.62ID:BD76rR44
>>915
それってループしている最中に if で何らかの条件により break するってことだよね?
それならその if ブロックの中で別の変数に代入すれば良い。

int j = -1;
for (int i = 0; i < max; i++) {
 if (f(i)) {
  j = i;
  break;
 }
}
if (j >= 0) {
...
}

もし上記のように途中でbreakして抜けるのでないなら max の値そのまま使えば良い。
0920デフォルトの名無しさん
垢版 |
2018/11/06(火) 11:38:48.82ID:4wD9lBDw
時間の掛かるファイル読込処理を非同期実行して、その処理中にファイル読込具合に応じてJavaFXのプログレスバーを更新してるんだけど、
たまにプログレスバーが更新されない場合がある。なんで?

そのファイル読込処理とプログレスバー更新はインターフェースの継承メソッドに記述していて、
Threadクラスに登録するRunnableクラスのrunメソッド中でインターフェースの抽象メソッドを叩いて呼び出している。
1)イベントトリガが、JavaFXのFileChooserの選択完了時 → プログレスバー更新される
2)イベントトリガが、別のJavaFXの子Scene上のJavaFXボタン押下時(子Sceneのhide後) → プログレスバー更新されない
setImplicitExitをどうたらこたらするというのは一通り試した
簡単に解決したいんだがなあ
0921デフォルトの名無しさん
垢版 |
2018/11/06(火) 12:01:52.02ID:nXssBivk
>>920
JavaFXはもうJavaの標準ライブラリではなく単なる野良ライブラリの一つに過ぎない
スレ違い
0922デフォルトの名無しさん
垢版 |
2018/11/06(火) 12:19:26.12ID:4wD9lBDw
回答できんのなら黙ってろよな。回答できないくせに黙ってられないから池沼なのか
0933デフォルトの名無しさん
垢版 |
2018/11/06(火) 19:07:34.12ID:13CfGTjW
どう見ても君がスレチ大魔王
0934デフォルトの名無しさん
垢版 |
2018/11/07(水) 00:26:50.27ID:s4BPycKf
substance.jarでswingの見た目変えるの好きだった
javafxは評判悪かった覚えがあるけどswing使用者はみんな移行したのかな
0935920
垢版 |
2018/11/07(水) 12:34:31.16ID:LJxZYzuZ
解決したったわ
しかしここはクソの役にも立たねえな
たまに書き込むけど、光合成も出来ない原始生命を相手にしているようで、ただただ孤独しか感じられねえわ
次はジュラ紀になったら来てやるから、それまでに精々、自然淘汰されておけよ
0936デフォルトの名無しさん
垢版 |
2018/11/07(水) 12:52:14.01ID:bimd4khF
FXのスレは本当にあるんだけどね。
0938デフォルトの名無しさん
垢版 |
2018/11/07(水) 14:02:24.18ID:+HyKX3eQ
>>934
FXは廃止されちゃったからね
極一部のニッチでしか使われてないしモバイルファーストやWebファーストの流れに侵食されてオワコン、とOracleさん自身が公式に宣言してる
0940デフォルトの名無しさん
垢版 |
2018/11/08(木) 12:06:43.94ID:QSZi8e/Z
Javaの仕事に転職したいのだけど
年収の交渉でプロ野球の契約更改のように代理人にお願いして年収アップの交渉をしてもらうシステムはないかな?
もちろん高収入になったらその1%は代理人に払うことにしたらその代理人もものすごくがんばってくれるからwin-winの関係になる。
0941デフォルトの名無しさん
垢版 |
2018/11/08(木) 12:17:54.62ID:Cbg63GbQ
君がなれ
0942デフォルトの名無しさん
垢版 |
2018/11/08(木) 12:20:00.08ID:cbRquK1Y
>>940
年収2000万ぐらいなら探せばあるだろ
それ以下なら商売にならなすぎだから厳しいと思うけど
0943デフォルトの名無しさん
垢版 |
2018/11/08(木) 12:25:50.93ID:Cbg63GbQ
1000万の1%が10万円。とすると月に10人以上成立させないとうまくいかんのではないか?
0944デフォルトの名無しさん
垢版 |
2018/11/08(木) 12:28:16.32ID:QSZi8e/Z
>>943
それ専門だから1日に5回同じ場所で連続で面接に参加して
それで1月に20日働けば月収1000万円。
0945デフォルトの名無しさん
垢版 |
2018/11/08(木) 12:31:21.50ID:fwzjEtEg
>>940
そんなことができる代理人は自分で稼ぐだろ
そもそも億円プログラマーなんて存在するのかも怪しいし
0946デフォルトの名無しさん
垢版 |
2018/11/08(木) 12:34:40.88ID:Cbg63GbQ
そういやさっきツイッターの広告でAIとチャットして何をやりたいかとか聞き出して人を募集している企業とのマッチングすのが出てきたよ。
やる前からAIに仕事奪われたようだなw
0950デフォルトの名無しさん
垢版 |
2018/11/08(木) 17:07:12.88ID:o3TwcDma
人工無脳でも対応向上だと騙される奴がいるんだから有効だと言わざる得ないな
どうせブラック紹介されるなら萌えキャラにでも紹介された方がいいだろう?
0951デフォルトの名無しさん
垢版 |
2018/11/09(金) 16:17:59.93ID:o+E2GY7o
このスレの少し前にもオラクルの認定試験の話題がありましたが、
Java Silverは持っていると役に立つでしょうか?
Java Bronzeは既に取得しています。
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況