在看《Java Concurrency in Practice》,第三章Sharing Objects讲到可以通过thread confinement实现thread safety,也就是不共享数据。各位大神可不可以举个例子来细说下Thread Confinement。那个Ad-hoc Confinement没具体例子。

解决方案 »

  1.   

    貌似叫线程封闭,ThreadLocal应该就是这意思吧。。
      

  2.   

    能不能举了具体的例子,没搞懂~~书上那个Stack Confinement就是没暴露局部变量,每个线程执行方法时都用自己的局部变量,线程执行完,栈销毁。
      

  3.   

    ThreadLocal是其中一种Confinement~~我也不熟悉ThreadLocal
      

  4.   


    书中不是讲了三种 线程封闭 的方式嘛
    1、栈封闭   就是方法中局部变量永远都是某个线程专用的
    2、ThreadLocal 这玩意儿可以想象成类似于Map的行为,虽然底层不是map,key是线程对象,value是你想存的值,当从ThreadLocal get的时候,内部会调用Thread.currentThread获取当前线程对象,然后从“map”中获取之前存的值。所以你存的值,永远只会被存值的那个线程使用,其他线程获取不到
    3、专设的线程封闭  这个是最脆弱的,因为从语言上没法保证,上面1,2都有语言特性来提供保障,但这个得由程序员自己去保证一个变量只被某个线程访问
      

  5.   

    thread local
    http://www.drdobbs.com/jvm/184405382