はじめに(経緯) 「せんせー、Mavenがなんかうまく動きません」 というわけで、初学者向けにまとめておく。 プロジェクトと動作環境のJDK Versionの不一致 mvn packageやmvn jetty:run でプロジェクトのパッケージ化や動作をさせようとする際に、次のようなエラーが発生する。
5.2. スレッド間の待ち合わせ 複数のスレッドが協調して処理を行う場合、あるスレッドの部分処理が終了するのを、もう一方のスレッドが待機したい場合があります。そのようなとき、java.lang.Objectクラスのwait/notify/notifyAllメソッドを使用します。 wait() waitメソッドは、notifyまたはnotifyAllメソッドが呼び出されるまで処理を待機するメソッドです。waitメソッドを呼び出すためには、スレッドは該当するオブジェクトのロックを取得していなければいけません。 notify()/notifyAll() notifyおよびnotifyAllメソッドは、waitメソッドによって待機状態にあるスレッドの実行を再開させるメソッドです。あるオブジェクトに関して、waitメソッドで待機しているスレッドの集合のことを「ウェイトセット」と呼びます。notify
Java の ExecutorService でスレッドプールを利用できる ここで説明するのは、おそらくもっとも安全にマルチスレッドプログラムを書く方法です。 さらに同様の方法で簡単に拡張することで、複数のスレッドを効率よく使うスレッドプール (Thread Pool) を利用できますので、 ぜひ覚えておきたい方法です。 その方法とは、 ExecutorService を利用することです。 ExecutorService では、 「Java のマルチスレッド・プログラミングの基本」 でみたように Thread オブジェクトをそのまま生では使いません。 ExecutorService ではスレッドプールが用意されるので、そこにタスクがディスパッチされることで処理が行われます。 Java のタスクの状態 Executor によって処理されるタスクの状態は次の四つです。 created (作成さ
基本パターン(単一スレッド) 別スレッドにするタスクの作成 別にスレッドにしたい処理を、Runnable インタフェースを実装したクラスのrumメソッドに実装する。 public class TestRunnable implements Runnable { public void run() { // スレッドIDを出力する System.out.println(Thread.currentThread().getId()); } } スレッドの生成とタスクの実行 ExecutorService クラスを利用して、スレッドの生成・タスクの実行を行う。 ここでは、「newSingleThreadExecutor」でスレッドを一つのみ生成し、5回タスクを実行している。 ExecutorService exec = Executors.newSingleThreadExecutor(); f
5.1. 他のスレッドの終了を待つ 別のスレッドにある処理を任せ、そのスレッドが終了したときに、自分のスレッドの処理を再開したいという場面があります。このようなとき、Threadクラスのjoinメソッドを利用します。 joinメソッドには、引数の異なる3つのメソッドがあります。 void join() void join(long millis) void join(long millis, int nanos) join()は該当のスレッドが終了するのを永久に待ちつづけます。引数のあるものは、該当のスレッドが終了しなくても、指定した時間経過すれば処理を再開します(ただし、join(0)はjoin()と同じように永遠に待機します)。いずれのメソッドも、外部のスレッドよりinterruptメソッドで割り込まれた場合、InterruptedExceptionを発生して処理を終了します。 次のプ
JVMはプロファイリングを利用してコードの最適化を行います。対象は頻繁に利用されるコードパスのみですが,徹底的に行うことで大きな効果を上げています。JITコンパイルされたコードに関しては,現在では多くの場面において (その割合も増えつつあります) C++の実行速度を凌駕しています。 このような事実にも関わらずJavaが今でも低速なプラットフォームとして認識されているのは,おそらくは初期バージョンのJavaプラットフォームでの経験が,歴史的な負のバイアスとして働いているためでしょう。 早まった結論を出す前に,客観的な見地に立って,最新のパフォーマンス結果を評価するようにお勧めします。 2. Java コードの1行にはそれ自体で意味がある 次の短いコード行を考えてみてください: MyObject obj = new MyObject(); Java開発者ならば誰でも分かるように,このコードはオ
Help us understand the problem. What is going on with this article? 非同期処理でよく使う IntentService と AsyncTask は何が違って何が同じなのかという記事を読んだので。 HandlerThreadについて HandlerThreadは、内部に持っているHandlerにメッセージが渡ってきた時、それを順に処理するようできているので、メッセージを同時に複数送ると、ジョブキューのようにシリアルな動作で、メッセージを1つずつ捌いていきます。 これはHandlerThreadのコードを読むのが早いのですが(凄く短いので)、このクラスはイベントループに紐付けるための定型処理のある、ただのThreadのサブクラスです。なので、内部に持っているのは、Handler(メッセージ)ではなく、Looper(イベントループ
クライアントアプリにとって、マルチスレッドプログラミングは避けては通れない重要な概念です。しかし、気をつけないとハマるポイントも多く、初めてクライアントアプリを学ぶ人たちからすると、複雑で難解な取っつきづらいものでもあります。ここでは、スレッドの基本から、効率的な使い方、また複雑化しやすいポイントをシンプルに実装するためのノウハウを見ていきます。 TL;DR スレッドの取り扱い方を知る Threadをそのまま使わず、AsyncTaskやIntentService、時にThreadPoolExecutorを使ってスレッドの使い方を効率化する。 複雑な処理フローをシンプルに扱うためのフレームワークを導入する PromiseやRxAndroidなどで、複雑化しやすいポイントを整理する。 スレッドの基本 スレッドといえば、ThreadクラスやRunnableクラスがベースにあります。以下のようにす
まずはサイト選定だよ 本当はワードプレスがいいけど、サーバ代がかかるから、アフィリできるブログを選ぶよ シーサーかFC2がおすすめだよ >>3 難易度は高いけど、複数サイト作れば可能だよ
つい最近までは、スレッドセーフなハッシュマップやリストはjava.util.concurrentのConcurrentHashMapなどで作るもんだと思っていたけど、スレッドセーフなコレクションクラスをどのように定義すれば良いか調べていたら最新のバージョンではCollections.synchronized***で作るのが良いらしい。ということで、簡単すぎるけど、例を紹介して備忘録とする。もちろん、中身はLinkedListなどでも良く、必要なデータ型の特性に合わせて使い分けることができる。ちょっと便利になった気がする。同時にVectorがもはや後方互換のためだけに存在することを知って、愕然としている。学生時代とはずいぶんと変わったものだ。 import java.util.Collections; … List<Integer> sampleList = Collections.sync
C言語やPerlのfork&execのように、プロセスを同時に実行したり、同期を取るために待ち合わせる処理を行ってみましょう。 Java言語では、マルチスレッド機能が言語に含まれるため、比較的きれいにプログラムできます。 Javaの場合、2スレッドの同期と、3スレッド以上の同期で、処理が異なります。 マルチスレッドプログラミングも参照してください。 2スレッドの同期 2つのスレッド間の同期は、joinメソッドを使って、より簡単に実現できます。 子スレッドを起動し並行処理を行い、親スレッドが子スレッドの終了を待って、次の処理を行うプログラムを作成してみます。 処理内容は、Hello World!を表示するだけですが、スレッド名も表示するようにしています。 各スレッドの処理の流れは、以下のようになります。 親スレッドは、joinメソッドで、子スレッドが終了するまで待ちます。 親スレッド 子スレ
駄目だ。大問題だ。 long t1 = System.currentTimeMillis(); long t2 = System.currentTimeMillis(); System.out.println(t2-t1); 結果はなんとでるか? 99.9%以上の確率で0が表示される。そもそもSystem.currentTimeMillis()は時刻をミリ秒で返す。1行のプログラムを実行するのに1ミリ秒もかかってたら、たかだか1000行分動いただけで1秒かかってしまう。今のコンピュータはそんなに遅くない。 そもそもドキュメントをちゃんと読むと ミリ秒で表される現在の時間を返します。戻り値の時間単位はミリ秒ですが、値の粒度は基本となるオペレーティングシステムによって異なり、単位がより大きくなる場合があります。たとえば、多くのオペレーティングシステムでは、時間を 10 ミリ秒の単位で計測します
高齢者との高額サポート契約をめぐり、PCショップ「PCデポ」が炎上していた件で、ピーシーデポコーポレーションは8月17日、今後は75歳以上の契約解除を無償にするなどの対応を行うと発表しました。 弊社プレミアムサービスご契約のお客様対応に関するお知らせ 発端となったのは、Twitterユーザーのケンヂさん(@kenzysince1972)の投稿。80歳過ぎになる父が毎月1万5000円の高額サポート契約を結ばされており、解約しようとしたら10万円の契約解除料を支払わされた――という内容で、インターネット上では「相手が高齢であるのをいいことに、本来必要ないサポート契約まで結ばせていたのではないか」など、PCデポに対する批判が集まっていました(関連記事)。 話題になっていたレシートの画像。契約解除料として10万8000円を支払わされていたことが分かります 月々の請求額は1万4245円にものぼってい
解散の引き金を引いたのは誰だ!? 四半世紀近くの長きにわたり国民的アイドルグループに君臨したSMAPの解散発表ショックはいまだ冷めやらない。所属のジャニーズ事務所が一度は「休業」を決定したにもかかわらず、最悪の結末を迎えたのはメンバー最年少、香取慎吾(39)が「もう一緒にできない!」とギブアップしたことが原因との報道が飛び交い、悪者扱いされている。だが、本紙はその裏側にあった「我慢ならない状況」をキャッチした。それは――。 ジャニーズ事務所側が提案し、一時は決定した「休業」とSMAPの存続。だが、事態は今月10日に激変した。香取、草なぎ剛(42)、稲垣吾郎(42)の3人がジャニー喜多川社長(84)のもとを訪ねて「休むより解散したい」と伝え、リーダーの中居正広(43)も同調した――。これが、多くの芸能メディアが現在伝えている内幕だ。が、まだ“裏”があった。 木村拓哉(43)は夫人の工藤静
12月31日で解散するSMAPについて、ジャニーズ事務所がフジテレビ系「SMAP×SMAP」(月曜・後10時)で“感謝の言葉”を話す機会を設けるよう説得に動き出すことが17日、関係者の話で分かった。この日、同番組が年内で終了となることが正式発表された。5人は解散発表時に書面などでコメントしたが、いまだ生声を発しておらず、会見の予定もない。20周年を迎える番組の最後を最高の形で飾るべく、残り4か月間、全力を尽くす。 5人の生声が聞きたい―。ファンの間でも日に日に、その声が高まっている。関係者は「事務所は『本人たちが自分の言葉で話すことが一番。5人そろって話すことが無理なのであれば、一人一人でも』と考えている」と明かした。 13日深夜に解散を正式発表した際に一度、事務所は本人たちに会見を打診した。だが、木村拓哉(43)が休暇で米ハワイにいた。ほかのメンバーも会見を行うことに否定的で、書面で
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く