• 【深入比较ThreadLocal模式与synchronized关键字】


    【深入比较ThreadLocal模式与synchronized关键字】

    ThreadLocal模式与synchronized关键字都是用于处理多线程并发访问变量的问题。只是两者处理问题的角度和思路不同。

    1)ThreadLocal是一个Java类,通过对当前线程(Thread)中的局部变量的操作来解决不同线程的变量访问的冲突问题。所以,ThreadLocal提供了线程安全的共享对象机制,每个线程(Thread)都拥有其副本。

    2)Java中的synchronized是一个保留字,它依靠JVM的锁机制来实现临界区的函数或者变量在访问中的原子性。在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。此时,被用作“锁机制”的变量是多个线程共享的。

    同步机制采用了“以时间换空间”的方式,提供一份变量,让不同的线程排队访问。而ThreadLocal采用了“以空间换时间”的方式,为每一个线程都提供了一份变量的副本,从而实现同时访问而互不影响。

    【应用】

    如下两种设计数据库连接的例子

    public class DBConnection {
        Connection conn;
        private ThreadLocal<Connection> connLocal = new ThreadLocal<Connection>();
    
        public Connection getDBConnection() throws SQLException, IOException {...}

    第二种:

    private static DBOPool instance=null;
        public static synchronized Connection getInstance(){
            if(instance==null)
                instance=new DBOPool();
            return instance.getConnection();
            
        }

     可以在filter中关闭连接

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
                FilterChain arg2) throws IOException, ServletException {
            try {
                arg2.doFilter(arg0, arg1);
            } finally {
            
                new DBConnection().close();
            }
    
        }

     更多ThreadLocal参考http://www.linuxso.com/architecture/16145.html

  • 相关阅读:
    HDU 1711 Number Sequence
    PAT L2-016 愿天下有情人都是失散多年的兄妹
    PAT L2-024 部落
    斜率优化DP小结(含凸优化)
    jzoj 4475. 【GDOI2016模拟4.25】征途
    jzoj 6271. 2019.8.4【NOIP提高组A】锻造 (forging)
    jzoj 6273. 2019.8.4【NOIP提高组A】欠钱 (money)
    jzoj 6272. 2019.8.4【NOIP提高组A】整除 (division)
    2019.08.04【NOIP提高组】模拟 A 组 总结
    jzoj 2184. 羊羊列队
  • 原文地址:https://www.cnblogs.com/nobcool/p/3280928.html
Copyright © 2020-2023  润新知