マルチスレッドなアプリケーションで,各スレッドの状態は (1)普通に動作中:緑 (2)ロックを保持しながら動作中:オレンジ (3)ロック待ちのウェイト状態:赤 などの状態を遷移する。 もし(3)が長く続いたら,デッドロックが発生しているとわかる。 こういった複数スレッドの状態を調査するツールとして,フリーの「samurai」がある。 その使い方。 (1)スレッドの同期に失敗しているプログラム まずは,ロックを使わないプログラムの例。 hogeというフォルダの中に,次のクラスを用意: Callee.java(2つのスレッドから共通して呼ばれるクラス) package hoge; class Callee{ private static long sum; // ここのsynchronizedの有無で実行結果が全く違う public static void echo( String calle
ユニットテストを行うときに困るのが HttpServletRequest等のサーバなどで生成されるインスタンスを 引数としているメソッドのテストです。 そんなときはモックという擬似オブジェクトを 利用したテストを行うのが一般的です。 私もJUnitでテストを行う為にモックを 利用しようと思ったのですが、 昔利用していたmockobjectというライブラリが無くなっていました。(年を感じます;_;) 今はEasyMockやjMockといったライブラリが利用されているようです。 ということで今回、EasyMockを初めて使ってみました。以下、使い方です。 http://www.easymock.org/index.html (バージョンは2.4を使用) まず最初にダウンロードしたら easymock.jarをクラスパスに通します。 次に、 import static org.easymock.
Why Great testing includes isolation Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. In a lot of cases, we do not care about using real collaborators implementation in unit testing, as we trust these collaborators. Mock Objects replace collaborators of the unit under test. How Isolation involves Mock Objects To test a unit in isolat
本記事は、HP-UX Developer Edgeに掲載された記事を株式会社アットマーク・アイティおよび本記事の筆者が独自の判断のもとに加筆・修正したものです。 今回は、Javaにおけるヒープ・メモリ管理の詳細を説明します。JVMのヒープ・メモリの中で、新しいオブジェクトと古いオブジェクトがどのように配置されるかを理解することで、ヒープ・メモリが有効に利用されているか否かを判断することができます。また、JVMが出力するガベージ・コレクションのログを解析し、オプションの指定によってヒープ・メモリのサイズを適切にチューニングする方法を紹介します。 Java ヒープ・メモリの構造 Javaにおけるガベージ・コレクションのメカニズムを理解するには、まずヒープ・メモリの構造を知っておく必要があります。 図1は、JVM におけるヒープ・メモリの構造を示したものです。この図が示すように、ヒープ・メモリの
nextindex.jp 2020 Copyright. All Rights Reserved. The Sponsored Listings displayed above are served automatically by a third party. Neither the service provider nor the domain owner maintain any relationship with the advertisers. In case of trademark issues please contact the domain owner directly (contact information can be found in whois). Privacy Policy
本文書は、Javaにおけるコマンドライン引数の処理方法について検討・紹介するものです。まずはじめに、コマンドライン引数を含むパラメータの設定方式について整理し、それから本題のコマンドライン引数の処理について見ていくことにします。コマンドライン引数の処理には、JDKの範囲でコーディングする方法の他、オープンソースのライブラリを利用する方法について紹介します。最後に、アノテーションを使ったコマンドライン引数の処理を作っていきます。 プログラムにおけるパラメータ設定 はじめに 多くのプログラムでは、パラメータとして設定値を外から与えることが必要となります。パラメータをプログラム中に記述する、いわゆるハードコーディングをしてしまうと、パラメータを変更するためにはソースコードを修正して再ビルドすることになってしまうからです。したがって、プログラムを実行するときにパラメータを外部から取り込んでその設定
import java.io.InputStream; import java.io.IOException; public class ProcessBuilderTest { public static void main(String[] args) { try { ProcessBuilder builder = new ProcessBuilder("java", "-version"); Process process = builder.start(); InputStream stream = process.getErrorStream(); while (true) { int c = stream.read(); if (c == -1) { stream.close(); break; } System.out.print((char)c); } } catch (
マルチスレッドのアプリケーションはいろいろ時をつけなくてはいけないことがあります。同期や同時アクセスやプライオリティ、デッドロックなどなど。 Java では安易にスレッドを作ることができるのでいつのまにかスレッドをたくさん使っていたなんてことも起こりがちですが、そのつけは大きいです。 そんなマルチスレッドのアプリケーションを作る際に福音書となっているのが Java スレッドプログラミング です。残念ながら今は品切れで入手が困難なので、もし本屋に残ってたらすぐにでも購入したほうがいいです。 マルチスレッドと同様この本も内容が難しくて、なかなか理解するのが大変なんですが、マスターできたら鬼に金棒状態です。そして、この本の作者が Concurrency Utilities の原型を作った Doug Lea なのです。 Concurrency Utilities では次のような機能を提供しています
今回のテーマは「ExecutorService」です。 前回はThreadクラスを使用してマルチスレッドプログラムを作成しましたが、Threadクラスを意識することなくマルチスレッドプログラムを作成するためのExecutorというインターフェースがあります。 非同期処理がどのように実行されるかは、Executorインターフェースの実装次第なので、その実装による拡張がなされています。 例えば、ExecutorインターフェースのサブインターフェースであるExecutorServiceインターフェースは非同期処理の結果の生成、複数のタスクの一括実行などをサポートします。 ExecutorServiceインターフェースを実装するクラスにはThreadPoolExecutorなどがあります。 ThreadPoolExecutorはスレッドをプールし、非同期処理を効率的に実行します。 Exec
JUnitとは? † Java用の単体テストフレームワーク。 JUnitのようなテスティングフレームワークを活用することで、次のメリットがある。 テストを統一な方法で作成できる → 他人が見ても分かりやすい テストが簡単にできる また、単体テストコードがあれば、仕様変更時のデグレードを早い段階で発見することができる。 ↑ JUnit3との違いは? † 「junit.framework.TestCase」クラスを継承しなくてもよい。 テストメソッドのプレフィックスに「test」の必要がない。 テストクラス前後に行う処理を指定できるようになった。(@BeforeClass、@AfterClass) 例外検証のソースの記述が簡単になった。(@Test(expected=XXXXException.class)) パフォーマンスの検証もできるようになった。(@Test(timeout=1500))
Java Ruby on Railsのfixtureという機能は有名なので皆さんご存じかと思います。JavaでいうJUnitのTestCaseクラスに、 fixture :test と書くだけでtestというテーブルにtest.ymlという名前で用意されたテストデータが投入されるという機能です。 同じような機能はJavaでもかなり以前からDbUnitとして提供されてきましたが、使い勝手という点で圧倒的にfixtureが勝っている。というのは、DbUnitは汎用的なライブラリなので使うためにはDBへの接続定義をコードで書いたり、ロードするxmlファイルを探したり、といろんな手間があったのです。 DbUnitはデータベーステストのデファクト・スタンダードなのでJavaプログラマなら一度くらいは使ったことがあるかと思います。私も仕事柄いろんなところのアプリケーション開発環境を構築するのを手伝いま
一文字:char [/2010-06-20] 不変の文字列:String [/2023-09-24] 可変の文字列:StringBuffer/StringBuilder [/2023-09-24] StringWriter(PrintWriter)/PrintStream [/2009-02-14] StringJoiner [2014-03-19] コードポイントの例 [2017-01-28] 文字のStream [2014-04-29] 文字列の結合 [2007-07-01] 単独の結合の実行時間 ループ内結合の実行時間 +演算子の実態 [/2008-01-27] 結論 [/2014-04-29] 文字列の比較方法 [2008-04-16] 文字列比較の書き順 [2008-05-02] 半角カタカナ・全角ひらがな変換 [2012-06-15] 半角英数変換 [2014-04-29] c
皆さんも Java でプログラミングをするとなると、「JavaBeans」することが超多い...のは当り前のことだ。でだけど、 いちいち変数を定義するごとに setter/getter を作るのは面倒だ... とお思いの諸兄もきっと多いに違いない。まあ、Eclipse とかだったら、自動生成する、というのは一番間単で、マギレのない手段だからそうしちゃってる方も多いことだろう。勿論そうするのが一番いい。 けど、ここではちょいと勉強を兼ねて、 アノテーションから setter/getter を生成する、ってのはどうだ? というのをやってみようと思う。まあ、実際、 public class MyBean { @Bean(kind=Bean.Kind.GETTER) private String message; .... といったかたちで、そういうアノテーションを作るのは簡単なんだが、それをどう
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く