最近「java.util.HashMap」がスレッドセーフじゃないことを知って それについていろいろ調べてみた。 まず、「java.util.HashMap」はスレッドセーフじゃないから、複数スレッドが並行してHashMapにアクセスする場合はハッシュテーブルの破壊とか無限ループ、メモリリークを起きてしまうことがあるみたい。 なんで、その対策としては基本的にはHashMapの代わりに以下のようなsynchronizedMapを使うのがいいらしい。 Map map = Collections.synchronizedMap(new HashMap(...)); ただ、このsynchronizedMapについても少し調べてみると、実はこれはこれで問題があるらしく、 Iteratorで要素を取り出すときに同期を保証してくれないから、Mapの要素数が変わったりするとConcurrentModifi
すべてのスーパーインターフェース:EventListenerSE public interface ServletContextListener extends EventListenerSE ServletContext ライフサイクルの変更に関する通知イベントを受信するためのインターフェース。 これらの通知イベントを受信するには、実装クラスを Web アプリケーションのデプロイ記述子で宣言するか、WebListener でアノテーションを付けるか、ServletContext で定義された addListener メソッドの 1 つを介して登録する必要があります。 このインターフェースの実装は、宣言された順序で contextInitialized(javax.servlet.ServletContextEvent) メソッドで呼び出され、逆の順序で contextDestroyed(
今年の3月にJava 8が正式公開され、次のJava 9はおそらく2年後の2016年に登場すると予想されますが、そのJava 9に搭載される予定の新機能がオラクルから発表されたとInfoQの記事「Oracle Announces First Java 9 Features」が報じています。 InfoQが報じたJava 9の新機能は、JDK Enhancement Proposals(JEP)のインデックスページの中からバージョン9の予定になっているものとしても見つけられるようです。主なものをリストアップしました。 HTTP 2 Client HttpURLConnectionを置き換える予定で、HTTP 2.0とWebSocket対応 Light-Weight JSON API RFC7159に準拠したJSONデータの生成と読み込みを行うライトウェイトAPIを提供する Process AP
try-with-resources 文は、1 つ以上のリソースを宣言する try 文です。リソースは、プログラムでの使用が終わったら閉じられなければいけないオブジェクトです。try-with-resources 文は、文の終わりで各リソースが確実に閉じられるようにします。java.io.Closeable を実装しているすべてのオブジェクトも含め、java.lang.AutoCloseable インタフェースを実装しているオブジェクトはリソースとして使用できます。 次の例は、ファイルから最初の行を読み取ります。ファイルからデータを読み取るために BufferedReader のインスタンスを使用します。BufferedReader は、プログラムでの使用が終わったら閉じられなければいけないリソースです。 static String readFirstLineFromFile(String
Java1.5からEnum型が追加され、定数の定義等に利用されていますが、EffectiveJava久々に読み直していたら、EnumでSingletonをやるのがおしゃれさんだよと書いてあったので、ブログにメモしときます。 周知の事実すぎるので、今更かよ感ありますが、知らなかった人は明日からやってみてください。 Java1.5より昔は以下の様にSingletonにしていたと思います。ここでは遅延初期化とか、スレッドセーフかどうかとか、シリアライズで複製されちゃうじゃんとかそういうことは分かり難くなるので、省きます。そうすると、こんな感じですね。 package singleton; public class TraditionalSingleton { private static final TraditionalSingleton INSTANCE = new TraditionalS
HttpServletクラス Servletプログラムに必要なインタフェース、クラスについて解説します。 javax.servlet.Servletインタフェース Servletプログラムは直接的、もしくは間接的に必ずjavax.servlet.Servletインタフェースを実装している必要があります。javax.servlet.ServletインタフェースにはServletプログラムが必ず実装していなければいけないメソッドが定義されています。 javax.servlet.GenericServletクラス javax.servlet.Servletインタフェースを実装したクラスで、プロトコルに依存しないServletプログラムを作成する際に使用します。 javax.servlet.http.HttpServletクラス javax.servlet.GenericServletクラスを継承
このページでは、大体 使い方(1,2)でやったのに準じて、Logback の使い方を解説する。 目次 Logback の呼び方、というか slf4j 解説 slf4jのロガー実装切替えメカニズム logback.xml ログ出力 レイアウト Logback の呼び方、というか slf4j 解説 まあ、抽象論よりも、具体的なコードを見ようじゃないか。サンプルコードはこんなものだ。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test { protected static Logger log = LoggerFactory.getLogger( TestLogback.class ); public static void main( String [] args ) { new SimpleTe
ロガーの取得 LoggerFactory.getLogger()でLoggerを取得する。 このとき、引数の指定によって大きく2つに分かれる。 自分のクラスを引数に渡す方法 ロガーの名前を指定する方法 基本的には、前者の「自分のクラスを引数に渡す方法」がよい。 理由としては次のようなものがある。 logbakck.xmlでのロガーのフィルタリングの際に、 クラス名もしくはパッケージ名でフィルタリングできる。 このとき、名前を指定しているとその名前でフィルタリングすることになる。 よって、つけた名前をしっかり覚えていなくてはいけない。 よって、ロガーの名前を指定する場合は、 通常のログとは別の特別なログ出力するときなどでよい。 クラスを引数に渡す場合
Hibernate、ActiveObjects、S2Dao、Apache Cayenne、iBATISなどORMフレームワークが群雄割拠状態なJavaですが、使い方を勉強したり設定ファイル書いたりするのが少し面倒かなと思っている人がいるかもしれません。 特にちょっとしたアプリケーションを作るならば、素のJDBCを使うのは嫌だけど、それに近い形で使えるORマッパーが欲しいと思うことがたびたびありました。 ということで以下の条件でJDBCを薄くラッピングしているJavaのライブラリを探して発見したものを紹介します。 レコードをオブジェクトに自動的にマッピングしてくれる できるだけSQLを書く量を減らすことができる いざとなったら生SQLを書くことができる 導入が簡単である 依存ライブラリが少ない 以下に挿入、検索、更新、削除を実行するコードを書いています。 今回はDBがMySQLだったので、M
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く