ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaコミュの[専用]雑談トピック

  • mixiチェック
  • このエントリーをはてなブックマークに追加
トピックを立てるまでも無い雑談はこちらでどうぞ。

コメント(271)

ふと気になったもので
みなさん、DaemonThreadとThreadの使い分けってどうしています?

私は最近はデスクトップアプリや常駐アプリ(Not Webアプリ)を作ることが多いです
特に意識せずThreadを使用してるのですが、もしかして基本をDaemonThreadにすべきなのだろうかと、ふと思ったもので
> 232
> DaemonThreadとThreadの使い分けってどうしています?
(中略)
> もしかして基本をDaemonThreadにすべきなのだろうか

基本は正規のスレッド。
後始末の必要がなく、いつ放棄してもよい処理のみをデーモンスレッドにする。
デーモンスレッドをライフサイクル管理の代替と考えるのはとても危険。
たとえばI/Oを行うスレッドを考えると分かるんじゃないかな。finallyが実行されないとか。
ご返答、ありがとうございます

普段DaemonThreadの必要性を感じていなかったところ、Eclipse(RCP)動かしてたら、思った以上にDaemonThreadが沢山走ってたので、もしかしてDaemonThreadってもっと使うべきなのか!? と思った次第です

後始末の必要がなく、いつ放棄しても良い処理をデーモンスレッドにするというのは
デーモンスレッドにした方が良いというより、どっちでもいいけど、デーモンスレッドの方が終了処理省けるから楽って程度なんでしょうね

なおさらデーモンスレッドの存在意義がわからなくなってきました
もしかして、いらなくね?

積極的に使ってるよ、って事例とかあれば教えてください
> C#さん

あまりマルチスレッドで組んだ経験がないので素人の浅知恵かもしれませんが、
もし、デーモンスレッドにできるのにそれがユーザースレッドとして実行されてたとすれば、
終了時に、わざわざ全スレッドを手動で止めに行かなきゃならないですよね?
それってけっこう不便じゃないですか?

もしすべてユーザースレッドだとしたら、不便なだけじゃなく、
例えば、JFrameのクローズボタンがクリックされたことを検知した場合、
Swingのイベント用のスレッドから他のすべてのスレッドのインスタンスを参照できないと、
プログラムの終了ができなくなってしまう気がします。
> 234
> なおさらデーモンスレッドの存在意義がわからなくなってきました

終わり方が違うだけなので、そのスレッドの存在がJVMの
シャットダウンを妨げないようにしたい場合が使いどころです。

> もしかして、いらなくね?

使うにしても、既に完成してるモノに対して、JVMのシャットダウ
ンを速めたい場合に、スレッド一つ一つをチマチマしかも入念に
見直してくって感じになるでしょうね。

> 積極的に使ってるよ、って事例

典型的な使用例は、ポーリング処理を行うスレッドとかクライア
ント側の受信待ちうけスレッドとかですね。
でも積極的には使わないと思います。終了が遅いと言われたら
しぶしぶという感じでしょう。
>ゆ〜ゆ〜 さん
そうですねぇ、今までユーザースレッドを終わらせられるように構えておくのが普通だったので、特に手間とは感じなかったのですが、使い捨てのスレッドやアニメーションスレッドとかはDaemonにしとくと楽できる感じですね

>Shoji さん
おっしゃるとおりですね
そんなに積極的に使わなくても、ま、いいかという感じですね

今後はせっかくなので影響のなさそうなスレッドはDaemonにして終了処理を少し楽してみようかと思います
皆様がeffective javaを読み始めたとき、

・和訳が読取りずらい。
・javaの力がまだ初級を抜けたかな程度のため理解しずらい。
・言ってることはなんとなくわかるけど、ものに出来るレベルまでの理解はできていない。

などの理由で苦労された、またはしている方はいませんでしょうか?

私は今上記にあげたような状態で何か打開策はないかと困っています。
何かアドバイス・体験談・effective javaの勉強会でこんなのやってるみたいよ。
などの情報を頂けないかと思います。

よろしくお願いします。

アドバイスにはならないんだけど、気休めに・・・・・

読み取りづらいと思った事は無かったですねぇ

訳者の柴田さんがblogを引用させて頂きますと
---
社内のJava教育※で、翻訳原稿を用いた教育も行ってきたのですが、初心者向きではありません。社内教育では、『プログラミング言語Java第4版』の内容をすべて学習して(練習問題もほぼすべて解いて)もらった後に、『Effective Java 第2版』を使用して学習してもらいますが、それでも内容に関する多くの質問が受講生から出されます。「訳者まえがき」にも書いていますが、やはり、『プログラミング言語Java第4版』の内容程度は、理解している必要があります。
---

ということなので、Javaの初級レベルで理解にてこづるのは当然なのだから、じっくりと腰をすえてJavaの勉強をすればいずれ理解できるようになると思います
柴田さんの言を借りるなら「『プログラミング言語Java第4版』の内容をすべて学習して(練習問題もほぼすべて解いて)」と言うことですね
コメントありがとうございます。

まだ時間をかけてみたというわけではないので、とりあえずやってみてから言えよ!と言われればそれまでなんですが。

SJCPが受かったのでそろそろ読んだら理解できるかな〜という思いで読み始めたところです。

初級を抜け出したかなくらいの人が、一人で読んで、ものに出来るレベルの理解をできるかといったら、ちょっと難しいとこがありそうですよね。
というただの愚痴?ですわーい(嬉しい顔)あせあせ(飛び散る汗)
メンテってのはいわゆる保守のことで、
基本的にはバグ修正や機能改善、機能追加などをします。

ほとんどの場合、システムにバグが無いって事は無いんですね。
試験の漏れやすり抜けなどの人為的なミスはもちろん、
長い目で見ればパラダイムシフトなどによってバグが出たりします。

そのシステムを安定して使い続けるための調整する仕事、
みたいな感じでしょうか。
242 DA♪さん

なぜ、メンテの時に止めるかという意味なら。
止めないで使いながらにすると、不整合が起こる可能性があったりするので、一度止めたりします。
たとえば、データを読み込む時は前のシステムのフォーマットで、データを書き込む時は次のシステムのフォーマットだったりとかすると、変なデータが出来ちゃったり。

他にも、変更は一瞬で終わるけど、確認と問題があった時の時間を設けていたり。


なぜ、メンテを行うのかという意味なら。
不定期なアップデートは既出ですね。あと、実機を他のマシンに変更する運用の問題とか。

動的なシステムを設計する際に、定期メンテナンスを前提に構築することもあります。
バッチ処理やバックアップをとったり。夜間止まっているサービスだと表に出ませんが。
それだと意味が分からないので誰も回答できないですよ
これは日本語の問題です
初心者を自覚しているなら面倒くさがらないで主語や目的語をきちんと書きましょう
プログラミング初心者の者です

今月サーティファイのjava検定2,3級を受検する予定です。
去年スクールに通うなどして勉強しましたが、サイトを見ると合格率も低いみたいだし少し不安です。

そこでこのコミュニティで以前に同じ試験を受験された方などいらっしゃいましたら、試験の対策や費やした時間など教えていただければうれしいです。
合格された方も不合格の方もアドバイスお願いします。




245 ゴスリンさん

一定間隔でプロセスの一覧を見て、そのアプリが動いてなかったらそのアプリを起動するようなプログラムを使えばよいのではないでしょうか。Javaとは直接関係ないやり方ですが。
コミュニティの宣伝になります。

以下、該当している方、是非ともはいってください(@^^)/~~~

IT系の転職を希望している。
IT系の転職でもまぁOK。
IT系の仕事に早く就きたい方。

是非ともWELCOME!!

http://mixi.jp/view_community.pl?id=4945548
Android開発しませんか?
エンジニア向けハンズオンの方は、Javaエンジニアであれば、1日でAndroid開発を身につけられる構成です。
http://www.clouds-inc.jp/seminar/android/
[求人トピックより]
やすだけいさん=鐘ヶ江さん

バカにするにも程があるという物でしょう。
誰でも良いのならその辺のおねいちゃんを集めたら?

どうして失敗したのか?
反省が無いことには一生同じ間違えを繰り返します。

同じ間違えを繰り返しても懲りない人は存在するのでしょう。

と太平洋の向こう側にいる私にでも伝わってくるようでは
どうかしていると思われても仕方がないことでしょう。
Java Zone2010のプロモーションを見つけたので貼っておきます。



自分はゲイツが出てきたとこで吹いてしまいました。
どうも。javaで翌月のカレンダーを表したいんだけどまったくわからないんで知ってる人メソッドだけでもいいんで教えてください。
androidのandroid.graphics.Rectではまりました。
left,top,right,bottom。

awt.Rectangleだと
x,y,width,hight。

Smalltalkでも知っている限りx,y,w,hをインスタンス変数に持っていたような。

レンダリング時に、イメージが伸びたり縮んだりして楽しみました。

AWTを使いプログラミングして見ましたが、いろいろとはまってしまいました。
そこで気がついたことを書いておきます。

全般にlayoutの設定がまともになされていないと、グチャグチャに表示され
ると思っていましたが、そうでなく何も表示されないことが多いです。

以下の様にlayoutについて全く何も表示しない場合は、既定値の
FlowLayout(水平流し)が表示されます。

各コンポーネントの位置・サイズを設定(setBounds())せずに、layoutにnull
を設定すると何も表示されないです。
写真左
import java.applet.Applet;
import java.awt.*
public class TestAWT01 extends Applet{
  //applet初期化
  public void init() {
    // main panelにlayout不設定、既定値FlowLayout(水平流し)を指定
    Button btnA = new Button("OK");
    TextField tfA = new TextField(3);
    TextArea taA = new TextArea(2,10);
    //各コンポーネントの位置・サイズを設定(setBounds())せずに、layoutにnull
    //を設定すると何も表示されない。
    //this.setLayout(null);
    this.add(tfA);
    this.add(btnA);
    this.add(taA);
  }
}

layoutにnullを設定していても、各コンポーネントの位置・サイズを設定
(setBounds())すると、指定した位置・サイズで表示します。
因みにsetLocation()で位置だけを設定しても何も表示されないです。
写真中
import java.applet.Applet;
import java.awt.*
public class TestAWT01 extends Applet{
  //applet初期化
  public void init() {
    Button btnA = new Button("OK");
    TextField tfA = new TextField(3);
    TextArea taA = new TextArea(2,10);

    tfA.setBounds(20,20,40,20);
    btnA.setBounds(70,20,40,20);
    taA.setBounds(20,50,150,60);
    // main panelにlayoutにnullを設定
    this.setLayout(null);
    this.add(tfA);
    this.add(btnA);
    this.add(taA);
  }
}

layoutが既定値のFlowLayoutで、各コンポーネントの位置・サイズを設定した場合、
その指定した位置・サイズは無視されFlowLayoutになります。
写真右
import java.applet.Applet;
import java.awt.*
public class TestAWT01 extends Applet{
  //applet初期化
  public void init() {
    Button btnA = new Button("OK");
    TextField tfA = new TextField(3);
    TextArea taA = new TextArea(2,10);

    tfA.setBounds(20,20,40,20);
    btnA.setBounds(70,20,40,20);
    taA.setBounds(20,50,150,60);
    //this.setLayout(null);既定値FlowLayout
    this.add(tfA);
    this.add(btnA);
    this.add(taA);
  }
}
見たとおりそのまま
flatmatrix[]={0,1,2,3,4,5}だとして

[0 2 4]
[1 3 5]

と表示するだけのプログラム。

各行ごとはそれぞれ配列をひとつずつ表示
内容が不適切であれば削除してください。

大原の基本情報技術者のWEB講習を受講し言語対策としてJAVA講義を聴いているのですが、実際のプログラムを作るわけでもなくぜんぜん身になっていません。そこで今は技術評論社の「3ステップでしっかり学べるJAVA入門」で勉強を開始していますがいまひとつよくわかりません。

私の住んでいる宮城県北部で(私の調べた範囲で)JAVAの講習を受けられる教室がない状況です。
勉強するとしたらJAVA経験者にスカイプなどで双方の都合のよい時間で1時間1500円くらいで教えていただける方を探しています。
地元(宮城県大崎市周辺)で教えてもよいという方がいらしたらなおうれしいです。

>261
そこまでプロフェッショナルじゃないけど基礎教えることならできると思います。
ただお金払ってまでするより、このコミュなどで質問していっていくほうが効率的だと思います。
きちんと説明して、不明点などを言えば多分誰か答えてくれると思いますww

まず大ちゃんさんはどのレベルまでは理解できるのですか?
Cをやったことがあるとか、全く初心者でHelloWorldも怪しいとか、詳しいことを教えていただけたらアドバイスできるかもしれません。
>261
試験だけならプログラムを動かす必要はない。なら実習は要らないじゃん。ってことじゃね?

学校なんてそんなもんよ。
チャン様@オルコッ党さん、chunさん
書き込みありがとうございます。

まったくの初心者で自分でもJAVA言語を勉強したら何が出来るようになるかもあまりわからずやっている状況です。

でも、将来的に自分がしたいこと(業務の効率化、動画による情報発信、調べたいことと調べられる、インターネット、ネットワークにもっと精通するなど)をするために少しでも前に進みたいと思う気持ちで今は、基本情報技術者試験の勉強やWebクリエーターの勉強をしている所です。そこで言語も前に進むために役に立つのではないかと思って書き込みさせていただきました。

何人かの方からメッセージいただいておりますので、まずはやってみたいと思っております。
こんにちは、はじめまして。
質問トピと迷ったのですが、こちらに書かせていただきます。

Androidアプリのプログラミングをしたいと思っているのですが、
私はプログラミング未経験者で、勉強もほぼしたことがありません。
PCやプログラムというものについての知識は理系大学卒業程度だと思います。

個人によりけりとは思いますが、この状態から簡単なAndroidアプリを作れるようになるまでに、
どの程度の時間、期間がかかるでしょうか。

プログラミングと直接関係が無く、失礼な質問かもしれないと思いますが、
もし想像がつく方がいらっしゃいましたらお聞かせいただけませんでしょうか。
んー、人それぞれとしか・・・
アプリ作るだけならhello worldこぴぺして終わりでできるともいえるし。

何を目標にしているかはわからないけど、プログラミング言語の習得なら半年あれば基礎は覚えるでしょう。
ただ、実際に物を作るとなるとプログラム能力より企画力やプロジェクトの管理能力のほうが大切になってくるからそこまで含めてというんだったらどんどん書いて作っていくしかないから、いくら勉強しても足りないくらい。
んー、人それぞれとしか・・・
アプリ作るだけならhello worldこぴぺして終わりでできるともいえるし。

何を目標にしているかはわからないけど、プログラミング言語の習得なら半年あれば基礎は覚えるでしょう。
ただ、実際に物を作るとなるとプログラム能力より企画力やプロジェクトの管理能力のほうが大切になってくるからそこまで含めてというんだったらどんどん書いて作っていくしかないから、いくら勉強しても足りないくらい。
> Athuさん

ほぼ同じ条件でプログラミングを始めました。

簡単なアプリがどの程度かわかりませんが、私の主観だけで考えると、作るだけなら2〜3か月でできるかと。

ネット上のサンプルソースを流用してとりあえず動くものを作りたいのか、ちゃんと仕組みを理解して、品質の高いアプリを作りたいのかでも期間は大きく変わります。

また、1日にどれくらい作業時間をとれるのかによっても習得期間は大きく変わると思います。
チュン様さん、りょーちんさん

レスありがとうございます。おお、2,3か月〜半年ですか。

一応作りたいものが大まかに決まっているので、流用できるところは流用でよく、
できないところは自分で書ければという感じです。
素人考えなのですが、部分を的確に流用して利用するには、それを自分で
作れるくらいの知識が必要そうに感じるのですが、実際はどうなのでしょうか。

1日に勉強にとれるのは、平均すれば1時間程度になってしまうと思います。
> Athuさん

>素人考えなのですが、部分を的確に流用して利用するには、それを自分で
>作れるくらいの知識が必要そうに感じるのですが、実際はどうなのでしょうか。

ほとんどの場合はおっしゃる通りです。
ただ、流用だけで済む場合も少なくはありません。
その違いはものによるとしか言いようがありませんが・・・
(インターフェースがしっかり決まっていて実装に依存しない
部品などは中身を知らなくても流用できます。
ネイティブAPIなどもこれにあたります)

>1日に勉強にとれるのは、平均すれば1時間程度になってしまうと思います。

1日1時間程度は個人的にはちょっと厳しいですね。
私はまとめてやらないと理解できないタイプですので;;
ちゃんとしたもの(第三者が使うもの)を作ろうとしたら半年〜
1年くらいかかると思います。

ただ、2〜3ヶ月もすればどの程度の期間がかかるかなど、
自分でなんとなくわかってくると思うので、
それによって再スケジュールするというのも1つの手です。

これという回答ができなくてスミマセン。
りょーちんさん

ネイティブAPI…Windowsのウィンドウのような部分でしょうか。
決まった外見や動作をする部分は流用できるところがありそうですね。

いえいえ、十分です! 丁寧に答えてくださってありがとうございました!
個人的に、特に最初のまったく分からないうちは長時間できないかもしれない
と感じています。
とりあえず少しずつ進めてみて、様子を見てみようと思います。

ログインすると、残り238件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Java 更新情報

Javaのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング