はじめに:
さまざまなアイデアや角度にThreadLocalと同期はアドレスアクセスの競合に同じ変数を複数のスレッドを作ったが、問題の両方の契約されています。
- ThreadLocalのは、マルチスレッドアクセス違反を解決するためのスペースを犠牲に、各収納スペースのための別個のスレッドで時間を構成するためにJavaクラスである、ThreadLocalのスレッドを分離する効果を有する、唯一のスレッドに対応する値を得るために、スレッドが外にすることはできません所望の値にアクセスできます。
- シンクロナイズドJavaは、アクセス違反を解決するための時間を犠牲にする、スレッドの待機により、予約済みのキーワードです。クリティカル領域でアトミックアクセス関数や変数を達成するためのJVMロック機構に依存しています。ロック機構による同期機構に同時にその変数は、ロック機構として使用される唯一のスレッドアクセス変数のオブジェクトが複数のスレッドによって共有されることを確実にします。
コード
- シンクロナイズド
public class SqlConnectionUtil {
private static SqlPool instance=null;
public static synchronized SqlConnection getInstance(){
if(instance==null)
instance=new SqlPool();
return instance.getSqlConnection();
}
- ThreadLocalの
public class SqlConnectionUtil {
private static ThreadLocal<SqlConnection> tl = new ThreadLocal<SqlConnection>();
private static SqlConnection initSqlConnection = null;
static {
try {
initSqlConnection = DriverManager.getSqlConnection("url, name and password");
} catch (SQLException e) {
e.printStackTrace();
}
}
public SqlConnection getSqlConnection() {
SqlConnection c = tl.get();
if(null == c) tl.set(initSqlConnection);
return tl.get();
}
}