博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【深入比较ThreadLocal模式与synchronized关键字】
阅读量:4322 次
发布时间:2019-06-06

本文共 1216 字,大约阅读时间需要 4 分钟。

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

ThreadLocal模式与hronized关键字都是用于处理多线程并发访问变量的问题。只是两者处理问题的角度和思路不同。
1)ThreadLocal是一个Java类,通过对当前线程(Thread)中的局部变量的操作来解决不同线程的变量访问的冲突问题。所以,ThreadLocal提供了线程安全的共享对象机制,每个线程(Thread)都拥有其副本。
2)Java中的synchronized是一个保留字,它依靠JVM的锁机制来实现临界区的函数或者变量在访问中的原子性。在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。此时,被用作“锁机制”的变量是多个线程共享的。
同步机制采用了“以时间换空间”的方式,提供一份变量,让不同的线程排队访问。而ThreadLocal采用了“以空间换时间”的方式,为每一个线程都提供了一份变量的副本,从而实现同时访问而互不影响。

【应用】

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

public class DBConnection {    Connection conn;    private ThreadLocal
connLocal = new ThreadLocal
(); 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参考

转载于:https://www.cnblogs.com/nobcool/p/3280928.html

你可能感兴趣的文章
Vue.js——60分钟组件快速入门
查看>>
logback配置方式
查看>>
laravel 数据库操作小例子
查看>>
javascript中对象属性的介绍
查看>>
3天CSS总结
查看>>
一周复习总结(一)第二周
查看>>
similarity 字符串编辑距离相似度匹配
查看>>
linux中什么是shell?
查看>>
谈谈MySql数据库锁
查看>>
Mac上搭建rtmp流媒体服务器(结合FFmpeg的使用)
查看>>
mybatis06--动态sql
查看>>
C# WinForm开发系列 - Controls
查看>>
Thrust快速入门教程(二)——Vector的使用
查看>>
Java的概念
查看>>
opencv图像线性混合&imread()
查看>>
C++计算毫秒
查看>>
Spring IOC(转载)
查看>>
Java实现归并排序
查看>>
JQuery 前台传值到后台并调用后台方法
查看>>
Appium+Python3+ Android入门
查看>>