Java初心者のためのスレッドです。
※前スレ
Java入門・初心者質問スレ Part.3
http://mevius.2ch.net/test/read.cgi/tech/1491306071/
探検
Java入門・初心者質問スレ Part.4 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/06/30(金) 22:14:16.54ID:W0OUnv8/
304デフォルトの名無しさん
2017/08/12(土) 08:21:47.95ID:WyVA8Sgg >>302
データベースとのやりとりは結局、解決してないけどな。
データベースとのやりとりは結局、解決してないけどな。
305デフォルトの名無しさん
2017/08/12(土) 08:31:15.18ID:w+TtGEkw >>303
例えば、8・16ビットで、ビット演算して、何ビットの結果が必要なんだ?
少ない方の結果が必要なら、多い方を、少ないビットに変換すればいいし、
多い方の結果が必要なら、少ない方を、多いビットに変換すればいい
多いビット・少ないビットの、変換関数を探すか、自分で作ればいい
例えば、8・16ビットで、ビット演算して、何ビットの結果が必要なんだ?
少ない方の結果が必要なら、多い方を、少ないビットに変換すればいいし、
多い方の結果が必要なら、少ない方を、多いビットに変換すればいい
多いビット・少ないビットの、変換関数を探すか、自分で作ればいい
306デフォルトの名無しさん
2017/08/12(土) 09:08:08.52ID:wZgNEoNa >>305
やりたいことは符号無しintをlongに型変換したいのです。
どこかのサイトを見たところ、
longNumber = unsignedInt & 0x00000000FFFFFFFF
とすればいいらしいのですが、
そもそも桁違いでビット演算したらどうなるんだ?というのが気になりまして。
小さい方を大きいほうの型にキャストしてるのか、
それともキャストしてるんじゃなくて桁を増やしてるのか…
桁増やすにしても、符号拡張してるのか、0で埋めてるだけなのか…
気になって夜も眠れますん。
やりたいことは符号無しintをlongに型変換したいのです。
どこかのサイトを見たところ、
longNumber = unsignedInt & 0x00000000FFFFFFFF
とすればいいらしいのですが、
そもそも桁違いでビット演算したらどうなるんだ?というのが気になりまして。
小さい方を大きいほうの型にキャストしてるのか、
それともキャストしてるんじゃなくて桁を増やしてるのか…
桁増やすにしても、符号拡張してるのか、0で埋めてるだけなのか…
気になって夜も眠れますん。
307デフォルトの名無しさん
2017/08/12(土) 10:00:34.76ID:WyVA8Sgg >>306
目的に対してどうしてそういう手段でやっているのか?
目的に対してどうしてそういう手段でやっているのか?
308デフォルトの名無しさん
2017/08/12(土) 13:30:45.00ID:VqNg7Zuq >>306
Chapter 15. Expressions
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.1
|
| 15.22.1。 整数ビット演算子&、^、|
| オペランドに対してバイナリ数値昇格が最初に実行されます。
|
| 5.6.2。バイナリ数値昇格
| いずれかのオペランドがdouble型であれば、他方はdouble型に変換されます。
| それ以外の場合、どちらかのオペランドがfloat型であれば、もう一方はfloat型に変換されます。
| それ以外の場合、どちらかのオペランドがlong型であれば、他方はlong型に変換されます。
| それ以外の場合、両方のオペランドがint型に変換されます。
ということなので今回の場合はlong型に変換されるはずよ
> longNumber = unsignedInt & 0x00000000FFFFFFFF
これは末尾にLをつけないとlongにならないかと
> int unsignedInt = -1;
> long longNumber = unsignedInt & 0xFFFFFFFFL;
上をコンパイルして逆コンパイルしたら下になった
> int unsignedInt = -1;
> long longNumber = (long)unsignedInt & 4294967295L;
なので型の変換はキャストっすね
Java 8ならInteger.toUnsignedLongというメソッドが用意されてるので
そっちが良いかも
Chapter 15. Expressions
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.1
|
| 15.22.1。 整数ビット演算子&、^、|
| オペランドに対してバイナリ数値昇格が最初に実行されます。
|
| 5.6.2。バイナリ数値昇格
| いずれかのオペランドがdouble型であれば、他方はdouble型に変換されます。
| それ以外の場合、どちらかのオペランドがfloat型であれば、もう一方はfloat型に変換されます。
| それ以外の場合、どちらかのオペランドがlong型であれば、他方はlong型に変換されます。
| それ以外の場合、両方のオペランドがint型に変換されます。
ということなので今回の場合はlong型に変換されるはずよ
> longNumber = unsignedInt & 0x00000000FFFFFFFF
これは末尾にLをつけないとlongにならないかと
> int unsignedInt = -1;
> long longNumber = unsignedInt & 0xFFFFFFFFL;
上をコンパイルして逆コンパイルしたら下になった
> int unsignedInt = -1;
> long longNumber = (long)unsignedInt & 4294967295L;
なので型の変換はキャストっすね
Java 8ならInteger.toUnsignedLongというメソッドが用意されてるので
そっちが良いかも
309デフォルトの名無しさん
2017/08/13(日) 01:18:20.66ID:SYaWjJhn 型違いって言うのが、典型的なバグの条件
MISRA-C などでは、バグを防ぐために、
元から、型が異なるものを演算してはいけないというルール
「A 演算子 B」と書く場合、A, B は絶対に同じ型である必要がある
だから、この式の前に、絶対に同じ型にしているから、
型変換のルールに、疑問など生じない
>>308
に書いているような型変換のルールを、探してきて見直すような、
暗黙の型変換というのは、すごく単純な場合を除き、使わない方がいい
机上デバッグで、毎回、型変換のルールを見直して、
あれこれ議論しないといけないから面倒
しかも、開発メンバーが変わるたびに、説明・確認しないといけない
基本的に、言語仕様書を引っ張りだして、確認するようなものはダメ。
言語仕様書が必要な、コーディングをしてはいけない。
言語仕様書を見ない人もいるし、バグるだけ
MISRA-C などでは、バグを防ぐために、
元から、型が異なるものを演算してはいけないというルール
「A 演算子 B」と書く場合、A, B は絶対に同じ型である必要がある
だから、この式の前に、絶対に同じ型にしているから、
型変換のルールに、疑問など生じない
>>308
に書いているような型変換のルールを、探してきて見直すような、
暗黙の型変換というのは、すごく単純な場合を除き、使わない方がいい
机上デバッグで、毎回、型変換のルールを見直して、
あれこれ議論しないといけないから面倒
しかも、開発メンバーが変わるたびに、説明・確認しないといけない
基本的に、言語仕様書を引っ張りだして、確認するようなものはダメ。
言語仕様書が必要な、コーディングをしてはいけない。
言語仕様書を見ない人もいるし、バグるだけ
310デフォルトの名無しさん
2017/08/13(日) 01:57:33.90ID:aXXBQeA8 PASCAL みたいなのがいいってことかな。
311デフォルトの名無しさん
2017/08/13(日) 02:04:55.15ID:s7ggTJlx C言語はJavaより型付けが弱いんじゃないかな
ブーリアンもないし
ブーリアンもないし
312デフォルトの名無しさん
2017/08/13(日) 07:00:28.21ID:SCeJgg+o C言語には継承やクラスといった概念がないからね、比較すべきはC++
313デフォルトの名無しさん
2017/08/13(日) 07:08:01.01ID:WltPyYK1314デフォルトの名無しさん
2017/08/13(日) 07:09:42.70ID:WltPyYK1315デフォルトの名無しさん
2017/08/15(火) 16:59:30.70ID:RbnTXkE5 今日からjavaはじめる
よろしくおまいら
初心者レベルだけどC言語から入ってjavaはじめるんだけど文字列結合とかキャストとか省略が許されててむずむずするわ
よろしくおまいら
初心者レベルだけどC言語から入ってjavaはじめるんだけど文字列結合とかキャストとか省略が許されててむずむずするわ
316デフォルトの名無しさん
2017/08/16(水) 09:09:46.76ID:qOG9houb 実装者が楽になる言語仕様がバージョンアップのなびに追加されるから
このせいで理解してない人が書いたクソコードが万延する諸刃の剣になってる
このせいで理解してない人が書いたクソコードが万延する諸刃の剣になってる
317デフォルトの名無しさん
2017/08/16(水) 10:09:58.32ID:F4bo7YNW >>316
本来の書き方をわかってて省略するのとそういうもんだと思って書くのとでは雲泥の差があるな
本来の書き方をわかってて省略するのとそういうもんだと思って書くのとでは雲泥の差があるな
318デフォルトの名無しさん
2017/08/16(水) 12:49:17.76ID:qOG9houb booleanとBooleanが混在しまくってるコード見たときには気が狂いそうになった
319デフォルトの名無しさん
2017/08/16(水) 14:56:15.62ID:Rgy1v+1A >>318
それだけじゃクソコードエピソードとしては弱いなぁ
それだけじゃクソコードエピソードとしては弱いなぁ
320デフォルトの名無しさん
2017/08/16(水) 15:17:45.44ID:uSl3r4ZJ >>319
あなたのエピソードもどうぞ
あなたのエピソードもどうぞ
321デフォルトの名無しさん
2017/08/16(水) 16:28:47.57ID:7SX+Ce7L ああ
322デフォルトの名無しさん
2017/08/16(水) 17:14:50.23ID:qxnt2v0K >>320
いきなりメソッドの初めで戻り値を変数に設定して、メソッド内で上書かずに最後でreturn。
いきなりメソッドの初めで戻り値を変数に設定して、メソッド内で上書かずに最後でreturn。
323デフォルトの名無しさん
2017/08/16(水) 19:48:31.09ID:ey68s8sH Java最大の失敗はBean
これのせいで日本企業の所有するコードはパブリックアクセサだらけの地獄になった
これのせいで日本企業の所有するコードはパブリックアクセサだらけの地獄になった
324デフォルトの名無しさん
2017/08/17(木) 00:48:02.70ID:x9wW63w8325デフォルトの名無しさん
2017/08/17(木) 06:28:14.94ID:8r7YxJOf >>324
あなたの解釈だとコーディングミスを想定していない。
あなたの解釈だとコーディングミスを想定していない。
326デフォルトの名無しさん
2017/08/17(木) 14:38:05.88ID:G+zZ9zG7 超初心者ですまん
メソッドを数値で分けて呼び出したいんだけど
今使ってるのがswitchでの分岐
int a;
switch(a){
case 1:
hoge();
break;
case 2:
hogee();
break;
}
みたいな
もっと効率の良いやり方があったら教えて欲しい
メソッドを数値で分けて呼び出したいんだけど
今使ってるのがswitchでの分岐
int a;
switch(a){
case 1:
hoge();
break;
case 2:
hogee();
break;
}
みたいな
もっと効率の良いやり方があったら教えて欲しい
327デフォルトの名無しさん
2017/08/17(木) 15:17:28.53ID:aODDrPp/ >>326
幾つぐらい分岐するのかな?少ない場合はそっちの方が速いような気がするが。
分岐が沢山あるとか増え続ける可能性があるとか使う側で自由にセットしたいとかいう場合はまずinterface作っておいてその中にメソッドの定義を書いておく。
次にそれをimplementしたクラスを必要なだけ作っておき、HashMapにキーと共にインスタンスを入れておく。
後はそのHashMapからキーを使ってget()してメソッド呼ぶだけ。
幾つぐらい分岐するのかな?少ない場合はそっちの方が速いような気がするが。
分岐が沢山あるとか増え続ける可能性があるとか使う側で自由にセットしたいとかいう場合はまずinterface作っておいてその中にメソッドの定義を書いておく。
次にそれをimplementしたクラスを必要なだけ作っておき、HashMapにキーと共にインスタンスを入れておく。
後はそのHashMapからキーを使ってget()してメソッド呼ぶだけ。
328デフォルトの名無しさん
2017/08/17(木) 15:33:57.25ID:XeZ7degk c言語の入門書が一通り終わってオブジェクト指向も触りたくなったんでお勧めの入門書教えて下さい
329デフォルトの名無しさん
2017/08/17(木) 16:06:35.83ID:OlLybMzW (´・ω・`)あのー
すべての文字列はStringクラスのインスタンスとしてあつかわれるっていう表現がうまくイメージできないの
じぶんなりにまとめたのは
String s = "こんにちは"
これは
String s = new String(こんにちは)
と同じでStringクラスをインスタンス化するときに、コンストラクタに対して引数としてこんにちはをわたしてる
そしてインスタンス化されたStringクラスのメンバ変数にこんにちはが代入された
同じようにすべての文字列は扱われるので、
すべての文字列はStringクラスのインスタンスとしてあつかわれると表現される
このイメージでいいの?
くわしいひとおしえてくれませんか?
すべての文字列はStringクラスのインスタンスとしてあつかわれるっていう表現がうまくイメージできないの
じぶんなりにまとめたのは
String s = "こんにちは"
これは
String s = new String(こんにちは)
と同じでStringクラスをインスタンス化するときに、コンストラクタに対して引数としてこんにちはをわたしてる
そしてインスタンス化されたStringクラスのメンバ変数にこんにちはが代入された
同じようにすべての文字列は扱われるので、
すべての文字列はStringクラスのインスタンスとしてあつかわれると表現される
このイメージでいいの?
くわしいひとおしえてくれませんか?
330デフォルトの名無しさん
2017/08/17(木) 16:09:03.31ID:8r7YxJOf >>329
Stringはよく使うクラスだから、特別な表記があるだけ。
Stringはよく使うクラスだから、特別な表記があるだけ。
331デフォルトの名無しさん
2017/08/17(木) 17:04:43.05ID:G+zZ9zG7 >>327
ありがとう…😭
ありがとう…😭
332デフォルトの名無しさん
2017/08/17(木) 17:19:20.91ID:Q7A+EFnW333デフォルトの名無しさん
2017/08/17(木) 18:12:59.47ID:TlX56ZGd334デフォルトの名無しさん
2017/08/17(木) 19:12:28.02ID:x9wW63w8335デフォルトの名無しさん
2017/08/18(金) 14:05:01.42ID:uPv212Ws336デフォルトの名無しさん
2017/08/18(金) 16:58:08.35ID:Rznosojv337デフォルトの名無しさん
2017/08/18(金) 17:12:35.77ID:uPv212Ws >>336
日本語わかりますか?
日本語わかりますか?
338デフォルトの名無しさん
2017/08/18(金) 18:31:21.19ID:Rznosojv >>337
それが日本語だとすると
変数が理解してない
というように解釈できるぞ
正しい文章とは、誤解の余地がない文章だろう
そんなこといいから、そういったコーディングをした時に発生し得る問題を挙げろよ
それが日本語だとすると
変数が理解してない
というように解釈できるぞ
正しい文章とは、誤解の余地がない文章だろう
そんなこといいから、そういったコーディングをした時に発生し得る問題を挙げろよ
339デフォルトの名無しさん
2017/08/18(金) 18:34:12.33ID:pRy4OxRt 普通なら「変数が変数たる理由を理解してない」っていうわな
まあ普通の人は各自で補って、それを論ったりはしないだろうけど
まあ普通の人は各自で補って、それを論ったりはしないだろうけど
340デフォルトの名無しさん
2017/08/18(金) 18:55:17.40ID:Rznosojv341デフォルトの名無しさん
2017/08/19(土) 08:15:29.19ID:IZN9Kb9e private staticメソッドを使う意味ってありますか?
オーバーロードしたpublic staticメソッドの受け先以外の使い方で
オーバーロードしたpublic staticメソッドの受け先以外の使い方で
342デフォルトの名無しさん
2017/08/19(土) 08:19:07.46ID:oORm5Ou6 >>341
staticメンバにしかアクセスしないprivateなメソッドはprivate staticで定義するんじゃないの
staticメンバにしかアクセスしないprivateなメソッドはprivate staticで定義するんじゃないの
343デフォルトの名無しさん
2017/08/19(土) 14:46:54.88ID:hY6XbUY2 long x
x = Integer.parseInt(str.substring(121,131))
文字列の一部から10桁のlong型の数値を取得しているのだけど
この取り出したい数値が大きい時に、 x=0 になってしまう不具合があるのだけどどうすればいいでしょうか
x = Integer.parseInt(str.substring(121,131))
文字列の一部から10桁のlong型の数値を取得しているのだけど
この取り出したい数値が大きい時に、 x=0 になってしまう不具合があるのだけどどうすればいいでしょうか
344デフォルトの名無しさん
2017/08/19(土) 14:54:42.91ID:yBrPcq+R >>343
Long.parseLongで
Long.parseLongで
345デフォルトの名無しさん
2017/08/19(土) 15:08:14.44ID:hY6XbUY2 >>344
ありがとうございます
ありがとうございます
346デフォルトの名無しさん
2017/08/22(火) 06:56:33.86ID:dBUxkpNb 頑張ってる
347デフォルトの名無しさん
2017/08/24(木) 19:19:42.05ID:JFHydDe1 スッキリわかるjava入門を電子書籍で読んでいるのですがラッパーの記述が何処にあるかわからないです
書籍をお持ちの方教えて頂けないでしょうか?
書籍をお持ちの方教えて頂けないでしょうか?
348デフォルトの名無しさん
2017/08/24(木) 19:53:22.35ID:KbcJbsO3349デフォルトの名無しさん
2017/08/24(木) 20:08:09.37ID:JFHydDe1350デフォルトの名無しさん
2017/08/25(金) 09:44:00.53ID:kDilQ37G 電子書籍なら何も考えずそのまま検索すれば良いだけのような?
351デフォルトの名無しさん
2017/08/25(金) 11:04:00.00ID:0JW1nIZL 電子書籍っていっても文字で情報を持ってるわけじゃないから検索はできない(普通に索引はある)
352デフォルトの名無しさん
2017/08/25(金) 12:29:18.21ID:KoB8BbC1 あー。文字情報なしの電子書籍はダメだね。
353デフォルトの名無しさん
2017/08/25(金) 18:40:20.43ID:w/d6Mddl 漫画や自炊以外でそんなのあるのか
354デフォルトの名無しさん
2017/08/25(金) 19:35:16.88ID:H2xWyZEq 静的初期化ブロックでif文使ってるようなクラスのカバレッジを100%にすることって出来ますか?
355デフォルトの名無しさん
2017/08/25(金) 20:03:58.53ID:E3yIY7Cv >>354 のようなのを見ると、どうして初心者は言葉足らずが多いのかと、いつも思うよ。
356デフォルトの名無しさん
2017/08/25(金) 21:39:57.94ID:27FuNdyg メソッドを作成し、呼び出せコリャ
メソッド名は命名規則にのっとって自由に決めてちょ。
値を定義済みの整数配列型と、整数型の値a, b を引数に渡して呼び出すと添え字 a の位置に b の値を挿入し整形済みの配列を戻り値として返すただし、元のデータは失われない
ただし、配列の長さは変化してよし。
メソッド名は命名規則にのっとって自由に決めてちょ。
値を定義済みの整数配列型と、整数型の値a, b を引数に渡して呼び出すと添え字 a の位置に b の値を挿入し整形済みの配列を戻り値として返すただし、元のデータは失われない
ただし、配列の長さは変化してよし。
357デフォルトの名無しさん
2017/08/25(金) 22:03:30.09ID:h0dKu5Bs 自炊してもスキャンした画像をOCRソフトに読ませてテキスト作らせて画像と一緒にPDFファイルに組み込む事は可能。
358デフォルトの名無しさん
2017/08/25(金) 22:05:05.37ID:h0dKu5Bs >>356
夏休みの宿題?
夏休みの宿題?
359デフォルトの名無しさん
2017/08/25(金) 22:08:03.15ID:h0dKu5Bs >>354
君の言っていることの意味がわからない。
君の言っていることの意味がわからない。
360デフォルトの名無しさん
2017/08/25(金) 22:13:20.05ID:h0dKu5Bs361デフォルトの名無しさん
2017/08/25(金) 22:18:03.60ID:/f+10ORp362デフォルトの名無しさん
2017/08/25(金) 22:27:50.64ID:x2/PsxCr >>356
public static void main(String[] args)
{
int[] src = {0, 1, 2};
for (int i = 0; i < 4; i++)
{
int[] dest = insert(src, i, 3);
System.out.println(Arrays.toString(dest));
}
}
static int[] insert(int[] src, int index, int value)
{
int[] dest = new int[src.length + 1];
System.arraycopy(src, 0, dest, 0, index);
dest[index] = value;
System.arraycopy(src, index, dest, index + 1, src.length - index);
return dest;
}
public static void main(String[] args)
{
int[] src = {0, 1, 2};
for (int i = 0; i < 4; i++)
{
int[] dest = insert(src, i, 3);
System.out.println(Arrays.toString(dest));
}
}
static int[] insert(int[] src, int index, int value)
{
int[] dest = new int[src.length + 1];
System.arraycopy(src, 0, dest, 0, index);
dest[index] = value;
System.arraycopy(src, index, dest, index + 1, src.length - index);
return dest;
}
363デフォルトの名無しさん
2017/08/26(土) 05:15:30.71ID:djCuR8Pr ダメだ。それ以上簡単な方法が思い浮かばない。
364デフォルトの名無しさん
2017/08/26(土) 05:57:22.09ID:djCuR8Pr IntBuffer 使ったらできたことはできた。
https://paiza.io/projects/huYRNUsbjFqONCaQwbpo1g
https://paiza.io/projects/huYRNUsbjFqONCaQwbpo1g
365デフォルトの名無しさん
2017/08/26(土) 08:40:40.53ID:dAUznQNC 低レベルスレは宿題ばっかやるアホが多くてホント呆れるわ
チラシの裏でやれドアホ
チラシの裏でやれドアホ
366デフォルトの名無しさん
2017/08/26(土) 09:32:58.96ID:yjz2CD2O367デフォルトの名無しさん
2017/08/26(土) 13:57:43.15ID:A+ZFL75S >>365
お前が出てけやカス
お前が出てけやカス
368デフォルトの名無しさん
2017/08/26(土) 14:15:33.60ID:doT9ddiU 初心者スレで
初心者を追い出してどうするのか
初心者を追い出してどうするのか
369デフォルトの名無しさん
2017/08/26(土) 14:31:40.42ID:DUW2NPhQ kumi炎上商法
370デフォルトの名無しさん
2017/08/26(土) 14:32:27.39ID:DUW2NPhQ 誤爆
371デフォルトの名無しさん
2017/08/26(土) 22:11:30.26ID:Z+RkQazT372デフォルトの名無しさん
2017/08/27(日) 01:30:32.99ID:Xa66qldf プログラミング超初心者です
Androidのアプリを作ることを目標にしてプログラミングを始めました
とりあえずプロゲートでJavaの文法を一通り学び終えたんですが、これからどのように勉強を進めていけば良いのかいまいちわかりません
フレームワークの勉強をした方がいいみたいなんですが、中々敷居が高くてどこからてを着ければ良いのやら、、
助言いただけると幸いです
Androidのアプリを作ることを目標にしてプログラミングを始めました
とりあえずプロゲートでJavaの文法を一通り学び終えたんですが、これからどのように勉強を進めていけば良いのかいまいちわかりません
フレームワークの勉強をした方がいいみたいなんですが、中々敷居が高くてどこからてを着ければ良いのやら、、
助言いただけると幸いです
373デフォルトの名無しさん
2017/08/27(日) 05:51:11.36ID:uirFB7xG374デフォルトの名無しさん
2017/08/27(日) 15:11:13.74ID:vQCj63e7375デフォルトの名無しさん
2017/08/28(月) 02:07:53.52ID:eSPpiGRP スレッドセーフについて教えて下さい。
よくフィールド変数は他スレッドから値が参照されたり、書き換えられたりするから、
使ってはいけない旨の記述を目にします。
例えば
class Calc{
private CalcSub calcSub;
public int execute(int param,int param2){
calcSub = new calcSub();
return calcSub.multiple(param,param2);
}
}
このようにメソッド内だけでCalcSubクラスをインスタンス化したときも、危ないのでしょうか。
メソッド内の変数はスレッドセーフと聞きますが。
呼び出すたびに新しいインスタンスを生成しても危ないのですか?
よくフィールド変数は他スレッドから値が参照されたり、書き換えられたりするから、
使ってはいけない旨の記述を目にします。
例えば
class Calc{
private CalcSub calcSub;
public int execute(int param,int param2){
calcSub = new calcSub();
return calcSub.multiple(param,param2);
}
}
このようにメソッド内だけでCalcSubクラスをインスタンス化したときも、危ないのでしょうか。
メソッド内の変数はスレッドセーフと聞きますが。
呼び出すたびに新しいインスタンスを生成しても危ないのですか?
376デフォルトの名無しさん
2017/08/28(月) 02:16:05.97ID:eSPpiGRP 上記の場合、フィールドに無理やり変数を持つ意味はありませんが、
よくフレームワーク等だとフィールドに変数とアノテーションで宣言しているのを見かけたので
その場合はなぜスレッドセーフで、上記のような場合はそうじゃない(?)のか気になったで質問しました。
よろしくお願いします。
よくフレームワーク等だとフィールドに変数とアノテーションで宣言しているのを見かけたので
その場合はなぜスレッドセーフで、上記のような場合はそうじゃない(?)のか気になったで質問しました。
よろしくお願いします。
377デフォルトの名無しさん
2017/08/28(月) 05:07:00.05ID:4ejthJEF 2, 30年やっていないと、マルチスレッド・プログラミングは出来ない
作っても、何十回に1回は、妙な動きをするから、使えない
しかも、たちが悪いことに、たいていは正常に動くから、
テストで発見できず、本番環境でバグる
作っても、何十回に1回は、妙な動きをするから、使えない
しかも、たちが悪いことに、たいていは正常に動くから、
テストで発見できず、本番環境でバグる
378デフォルトの名無しさん
2017/08/28(月) 06:02:19.75ID:9/ugOPx7 >>375
そんな嘘誰がいってるんだ?
そんな嘘誰がいってるんだ?
379デフォルトの名無しさん
2017/08/28(月) 06:15:29.06ID:IHzBG4Iq >>375
実際発生するかは確認してないが考え方として
スレッドαが新しいインスタンスaを作りメンバ変数に代入
スレッドβが新しいインスタンスbを作りメンバ変数に代入
スレッドαがメンバ変数からインスタンスb(あれあれー)を取得しメソッドをコール
スレッドβがメンバ変数からインスタンスbを取得しメソッドをコール
この場合はスレッドαがメソッドを終了するまでスレッドβがコールを待てば発生しないねsynchronized
またはメソッドローカルな変数だとαとβが格納する先がそれぞれ別だから上書きされない
だと思う
実際発生するかは確認してないが考え方として
スレッドαが新しいインスタンスaを作りメンバ変数に代入
スレッドβが新しいインスタンスbを作りメンバ変数に代入
スレッドαがメンバ変数からインスタンスb(あれあれー)を取得しメソッドをコール
スレッドβがメンバ変数からインスタンスbを取得しメソッドをコール
この場合はスレッドαがメソッドを終了するまでスレッドβがコールを待てば発生しないねsynchronized
またはメソッドローカルな変数だとαとβが格納する先がそれぞれ別だから上書きされない
だと思う
380デフォルトの名無しさん
2017/08/28(月) 06:17:34.69ID:IHzBG4Iq >>377
ServletやAndroidはマルチスレッドでは
ServletやAndroidはマルチスレッドでは
381デフォルトの名無しさん
2017/08/28(月) 07:31:21.61ID:4ejthJEF マルチスレッドの物は、相互には呼べない。
呼べたら、バグだらけになるから大変
相手のキューに投入できるだけ。
それを相手が、自分のタイミングで、拾って処理する
間接的な通信方式だけが認められる。
直接通信はできない。
直接通信すると、バグるだけ
呼べたら、バグだらけになるから大変
相手のキューに投入できるだけ。
それを相手が、自分のタイミングで、拾って処理する
間接的な通信方式だけが認められる。
直接通信はできない。
直接通信すると、バグるだけ
382デフォルトの名無しさん
2017/08/28(月) 08:23:21.64ID:Aloz5skw >>381
まあまあ君、そんなに興奮しないでください
まあまあ君、そんなに興奮しないでください
383デフォルトの名無しさん
2017/08/28(月) 16:17:04.11ID:izWN4xqJ jdk9に入ると言われてた型推論valって見送られたの?
384デフォルトの名無しさん
2017/08/28(月) 19:11:19.35ID:Zfeb1b7v >>375
それでダメになるとしたら CalcSub が static のクラス変数を持っていて呼び出した処理の中でマルチスレッドを考慮せずにアクセスする場合だな。
それでダメになるとしたら CalcSub が static のクラス変数を持っていて呼び出した処理の中でマルチスレッドを考慮せずにアクセスする場合だな。
385デフォルトの名無しさん
2017/08/28(月) 19:36:15.99ID:G4YrO8Fv >>375
直接の答えになってないけど、
わりと大雑把にデザインしていくしかないと思う
〜複数のスレッドからアクセスされるオブジェクトはこれで
そん中のメソッドがそれぞれ排他されている〜
こまかく排他や相互作用が入り組んでくると
んなもんはどうなってしまうか火を見るより明らか
排他処理のデザインを先にシンプルにかっちり作っといて
あとはそれだけを触らせる
まぁどうせ、どうしたってあとから徐々に複雑になっては来るんだけど…
直接の答えになってないけど、
わりと大雑把にデザインしていくしかないと思う
〜複数のスレッドからアクセスされるオブジェクトはこれで
そん中のメソッドがそれぞれ排他されている〜
こまかく排他や相互作用が入り組んでくると
んなもんはどうなってしまうか火を見るより明らか
排他処理のデザインを先にシンプルにかっちり作っといて
あとはそれだけを触らせる
まぁどうせ、どうしたってあとから徐々に複雑になっては来るんだけど…
386デフォルトの名無しさん
2017/08/28(月) 19:44:26.46ID:ml0Q9t1V ステートレス&ローカルを徹底すればいいだけだろ
387デフォルトの名無しさん
2017/08/28(月) 19:51:36.15ID:rn9GWLpv388デフォルトの名無しさん
2017/08/28(月) 21:08:49.30ID:ml0Q9t1V389デフォルトの名無しさん
2017/08/28(月) 21:45:08.56ID:UF1juDl3 要は、難しいところはFWに任せて、土方は簡単なところだけコーディングしましょうってこと
390デフォルトの名無しさん
2017/08/28(月) 21:53:13.49ID:Eg8/Ix/2 >>387
そんな低レベルの話ではないでしょう……
そんな低レベルの話ではないでしょう……
391デフォルトの名無しさん
2017/08/28(月) 22:40:31.14ID:ml0Q9t1V >>389
手続き型はやめようってはなしだろ?
手続き型はやめようってはなしだろ?
392デフォルトの名無しさん
2017/08/28(月) 23:39:04.03ID:eSPpiGRP では、CalcSubがこのような
クラスの場合は、上記のシチュエーションでも必ずスレッドセーフというわけですね。
class CalcSub{
final public int multiple(int value,int value2){
return value*value2;
}
ありがとうございまsた
クラスの場合は、上記のシチュエーションでも必ずスレッドセーフというわけですね。
class CalcSub{
final public int multiple(int value,int value2){
return value*value2;
}
ありがとうございまsた
393デフォルトの名無しさん
2017/08/29(火) 13:11:22.25ID:M5SL5GoR マルチスレッドでは、状態を持ったら、バグる。
だから状態を持たない、関数型言語が注目されている
そもそも、最速のNode.js なども、シングルスレッド。
Ruby の作者の、Matz ですら、マルチスレッドをやった事がない
まず、何十年もやっていないと無理。
マルチスレッドでは、シングルスレッド用の関数を使えない。
使うとバグるし、そもそも関数を、マルチスレッド対応で書く人は、いない
データ数が少ないと、マルチスレッドの方が遅くなる。
キャッシュ・メモリにも左右されるし、
速くなっても大したことない割には、開発費は何倍も掛かる。
というか、開発すればするほど、複雑すぎて開発不可能になっていくw
だから状態を持たない、関数型言語が注目されている
そもそも、最速のNode.js なども、シングルスレッド。
Ruby の作者の、Matz ですら、マルチスレッドをやった事がない
まず、何十年もやっていないと無理。
マルチスレッドでは、シングルスレッド用の関数を使えない。
使うとバグるし、そもそも関数を、マルチスレッド対応で書く人は、いない
データ数が少ないと、マルチスレッドの方が遅くなる。
キャッシュ・メモリにも左右されるし、
速くなっても大したことない割には、開発費は何倍も掛かる。
というか、開発すればするほど、複雑すぎて開発不可能になっていくw
394デフォルトの名無しさん
2017/08/29(火) 14:36:32.12ID:A+tXwp++ 句点多すぎで読みづらい
スパゲティ文
スパゲティ文
395デフォルトの名無しさん
2017/08/29(火) 16:56:55.55ID:eq9UJESX 1週間あれば入門書読めるだろ
何十年とかバカじゃないか
何十年とかバカじゃないか
396デフォルトの名無しさん
2017/08/29(火) 17:48:32.39ID:0M2qn692 >>394
句点ってw
句点ってw
397デフォルトの名無しさん
2017/08/29(火) 18:46:05.86ID:cDDCr6AR ほう、一週間でバクも起こさずにマルチスレッドプログラミングが出来るとな
398デフォルトの名無しさん
2017/08/29(火) 18:46:35.11ID:cDDCr6AR s/バク/バグ
399デフォルトの名無しさん
2017/08/29(火) 19:33:04.52ID:Y/wjG5sQ 一週間で入門できても
一通り習得するのは
一年じゃ足りないからな
たいていの技術は
一通り習得するのは
一年じゃ足りないからな
たいていの技術は
400デフォルトの名無しさん
2017/08/29(火) 20:21:22.70ID:8M1VQrJQ >>393
言語レベルでサポートされてるのに、どんだけ無能なんだよ
言語レベルでサポートされてるのに、どんだけ無能なんだよ
401デフォルトの名無しさん
2017/08/29(火) 22:31:12.64ID:vmCbO2W1 何十年も掛かることはまずないと思うがなあ・・・
402デフォルトの名無しさん
2017/08/29(火) 22:31:56.88ID:vmCbO2W1 何十年も掛かることはまずないと思うがなあ・・・
403デフォルトの名無しさん
2017/08/30(水) 08:19:03.91ID:wr6FPFdN 最近やる気が出ずにJava勉強してない・・・
やらないとと思いながら結局何もしてない・・・
やらないとと思いながら結局何もしてない・・・
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国民 居住目的でない住宅所有者に「空室税」課せる法案を提出 [少考さん★]
- 国民 居住目的でない住宅所有者に「空室税」課せる法案を提出 ★2 [少考さん★]
- 「働いて働いて」の流行語大賞に懸念 「言葉が独り歩き」 過労自殺遺族 [尺アジ★]
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化へ 過去10年間に使用のメールアドレスや電話番号等も★3 [Hitzeschleier★]
- 【画像】消えた美人女優 上原多香子さん(42)、沖縄で目撃される [牛丼★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は ★2 [蚤の市★]
- 【高市悲報】JA、発狂www「臨時に経費率を下げるので、どうかお米券を使ってください」 [246620176]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★1
- 高市早苗、森元総理の愛人だった [347751896]
- 【悲報】 世界最大級のポルノサイトPornHubの日本人ユーザーの年齢層、ヤバ過ぎる [303493227]
- 【高市朗報】中国、歴史上日本に一度も侵攻したことがない親日国だった [931948549]
- 新たなる弱男判定法見つかるwwwwwwwwwwwwwwwwww
