论坛首页 编程语言技术论坛

ThreadLocal,静态变量,实例变量,局部变量的线程安全,回复:ByteBuffer 到底怎么用?网络编程中一点总结!

浏览 22733 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2012-03-13  
Alrale 写道
http://www.iteye.com/topic/806990
看看这个吧

我也是上次写东西时发现了一个技术点,没想到这么多事情嘞
0 请登录后投票
   发表时间:2012-03-13  
singleant 写道
线程安全取决于数据是否有被多线程共享。
和变量类型关系不大。 局部变量也是相对的。

另外线程安全除了Synchronized之外还有很多选择:
如楼主的那个例子,
int locals = 0;  
这种简单的,可以通过定义
AtomicInteger locals = new AtomicInteger(0);  
来替换,实现线程安全。Atomic基于volitale和CAS实现轻量级乐观锁。
还有juc里的Lock序列的高级锁等可用。

现在已经进阶到了锁,回去研究一下再回来,等我!
0 请登录后投票
   发表时间:2012-03-16  
现在博客月度前40了!
0 请登录后投票
   发表时间:2012-03-19  

我现在经常用的就是在 service 类中获取比如当前登录用户等request中的信息。


public class AppHolder
{

    private static final ThreadLocal requestHolder = new ThreadLocal();

    public AppHolder()
    {
    }

    public static HttpServletRequest getRequest()
    {
        return (HttpServletRequest)requestHolder.get();
    }

    public static HttpSession getSession()
    {
        HttpSession session = null;
        HttpServletRequest request = (HttpServletRequest)requestHolder.get();
        if(null != request)
            session = request.getSession(true);
        return session;
    }

    public static void setRequest(HttpServletRequest request)
    {
        requestHolder.set(request);
    }

    public static ThreadLocal getRequestHolder()
    {
        return requestHolder;
    }

}


0 请登录后投票
   发表时间:2012-03-19  
forcer521 写道

我现在经常用的就是在 service 类中获取比如当前登录用户等request中的信息。


public class AppHolder
{

    private static final ThreadLocal requestHolder = new ThreadLocal();

    public AppHolder()
    {
    }

    public static HttpServletRequest getRequest()
    {
        return (HttpServletRequest)requestHolder.get();
    }

    public static HttpSession getSession()
    {
        HttpSession session = null;
        HttpServletRequest request = (HttpServletRequest)requestHolder.get();
        if(null != request)
            session = request.getSession(true);
        return session;
    }

    public static void setRequest(HttpServletRequest request)
    {
        requestHolder.set(request);
    }

    public static ThreadLocal getRequestHolder()
    {
        return requestHolder;
    }

}



不知道和我们讨论的有什么直接联系?
0 请登录后投票
   发表时间:2012-03-19  
ThreadLocal 应用的例子啊
0 请登录后投票
   发表时间:2012-03-19  
forcer521 写道
ThreadLocal 应用的例子啊

这例子来的有点突然。。。。
0 请登录后投票
   发表时间:2012-03-20  
cuisuqiang 写道
singleant 写道
线程安全取决于数据是否有被多线程共享。
和变量类型关系不大。 局部变量也是相对的。

另外线程安全除了Synchronized之外还有很多选择:
如楼主的那个例子,
int locals = 0;  
这种简单的,可以通过定义
AtomicInteger locals = new AtomicInteger(0);  
来替换,实现线程安全。Atomic基于volitale和CAS实现轻量级乐观锁。
还有juc里的Lock序列的高级锁等可用。

现在已经进阶到了锁,回去研究一下再回来,等我!

关于锁的使用,http://cuisuqiang.iteye.com/blog/1458754
0 请登录后投票
   发表时间:2012-03-23  
看到这个标题,我第一个想到的竟然是张孝祥
0 请登录后投票
   发表时间:2012-03-23  
xpeng71 写道
看到这个标题,我第一个想到的竟然是张孝祥

你不至于吧,张老师已经走了!
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics