java ThreadLocal proplem

时间:2016-12-21 05:39:25

标签: java tomcat

self.refreshControl.layoutIfNeeded()
self.refreshControl.beginRefreshing()
self.playersTable.setContentOffset(CGPoint(x: 0, y: -self.refreshControl.frame.size.height), animated: true)

案例1是正确的。

但案例2

  1. 首先是tomcat请求..
  2. 第二个请求可能会获得属于第一个请求的WebContext对象。
  3. 当第2步发生时,WebContext的请求对象已经禁用了。
  4. 然后在操作wc和请求对象时出现问题!
  5. 问题是:

    1. 是Thread上的一个ThreadLocal绑定不对吗?
    2. 是一个tomcat请求是一个Thread不对吗?
    3. 上面的代码有多正确?
    4. ps:对不起,我的英语不好。 :)

1 个答案:

答案 0 :(得分:0)

  
      
  1. 是Thread上的一个ThreadLocal绑定不对吗?
  2.   

ThreadLocal将单独的对象绑定到每个线程,是的。这就是它的目的。

  
      
  1. 是一个tomcat请求是一个Thread不对吗?
  2.   

每个请求都由一个线程处理,但我相当确定Tomcat不为每个请求生成一个新线程。它使用线程池。

此外,同一会话中的不同请求可能由不同的线程提供。

  
      
  1. 上面的代码有多正确?
  2.   

如果以前的答案没有解释,那么我不知道,因为你不清楚你认为你所观察到的行为是不正确的。

尽管如此,如果您的意图是每个请求只有一个WebContext,它是唯一的,那么ThreadLocal似乎是管理它的糟糕选择。另一方面,请求属性是为了这个目的而设计的。请参阅ServletRequest.getAttribute()ServletRequest.setAttribute()等。