简化多线程代码,提高性能

ZDNet软件频道 时间:2003-03-06 作者:翻译: Java研究组织-FooSleeper |  我要评论()
本文关键词:javatips
从1.2版开始,JDK中就加入了java.lang.ThreadLocal类。由于在JDK1.4中大幅改进了性能, ThreadLocal成了多线程程序开发人员工具箱中的一件必备工具。
假设你有一个多线程的应用程序要和数据库交互,并且打算为它增加数据库连接池以提高性能,那么可以用ThreadLocal类来为每个Thread创建Connection对象。

从1.2版开始,JDK中就加入了java.lang.ThreadLocal类。由于在JDK1.4中大幅改进了性能, ThreadLocal成了多线程程序开发人员工具箱中的一件必备工具。

ThreadLocal是简化多线程代码的一个好途径。它使你能够为每个线程保持一个单独的实例,而不必担心线程问题。如果每个Thread一个Connection对象还不够,那么还可以为每个Thread保持一个非线程安全的Connection池。

一个使用ThreadLocal类的最简单的方式是,用你希望共享的值来初始化一个ThreadLocal对象,。ThreadLocal有一个空的构造器和一个set(Object)方法。它所保持的值可以用get(Object)方法获得。

一般来讲很容易扩展ThreadLocal类并用initialValue( )方法来初始化对象。下面是一个使用JDBC Connection的例子:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionLocal extends ThreadLocal {

    static private ConnectionLocal instance = new ConnectionLocal();

    static public Connection getConnection( ) {
        return (Connection)ConnectionLocal.instance.get( );
    }

    protected Object initialValue( ) {
      try {
     return DriverManager.getConnection("jdbc:mysql://localhost:3306/todo",
"user", "password");
      } catch(SQLException sqle) {
          sqle.printStackTrace();
          return null;
      }
    }
}

下面是对静态的getConnection方法的调用:


    .. 你的代码 ..
    Connection conn = ConnectionLocal.getConnection();
    .. 使用连接 ..

只要执行调用的Thread对象——Thread.currentThread( )——是同一个,返回的Connection对象就是相同的。如果不是同一个Thread对象,那么返回的Connection对象也相应地不同。

 



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134