[ 
https://issues.apache.org/jira/browse/THRIFT-2218?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13825671#comment-13825671
 ] 

Alex Levenson commented on THRIFT-2218:
---------------------------------------

Well, we've found that users have been (for not entirely clear reasons) 
expecting TSerializer / TDeserializer to be thread safe. So I'd like to do 
something to help people from shooting themselves in the foot.

Here's  a few options:

1) Make them thread safe by wrapping the shared state (the 
ByteArrayOutputStream etc) in ThreadLocal so that it's not shared across 
threads.
- Seems like this would have better performance than 2 and 3 below but I can't 
back that up with data

2) Make them thread safe by making the methods synchronized
- Seems like a bad idea for performance?
3) Make them thread safe by simply *not* sharing the state in the first place 
(construct a new ByteArrayOutputStream each time the method is called)
- lots of object creation?

4) Add @NotThreadSafe and keep it the way it is 
- I'm not sure that that will help though? Anyone who looked at this class 
would see that it's not thread safe, so I wonder if they'll see the annotation?

5) Add static methods that are thread safe, leave the rest of the class alone
- sort of an in-between
6) Add a new utility: ThreadLocalTSerializer, leave the current classes alone.
- this might be the way to go? The presence of a class like this might help 
remind people that TSerializer isn't thread safe?

> Make java TSerializer and TDeserializer thread safe
> ---------------------------------------------------
>
>                 Key: THRIFT-2218
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2218
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Java - Library
>            Reporter: Alex Levenson
>            Assignee: Jake Farrell
>         Attachments: TSerDe-thread-safe.diff
>
>
> They currently are not thread safe, though it seems that many people assume 
> incorrectly that they are. 
> This patch puts the shared mutable state used by TSerializer / TDeserializer 
> in a ThreadLocal object so that it is safe to share instances of TSerializer 
> / TDeserializer across threads.
> I've attached the patch, and you can view it in github here as well:
> https://github.com/isnotinvain/thrift/compare/TSerDe-thread-safe



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to