There's nothing special about @Provides vs toProvider.  @Provides is just
syntactic sugar for creating a Provider<T> instance and binding it with
toProvider(instance).

There's nothing built into Guice to make Providers thread-safe.  If your
provider has state that is mutated among different calls to provider.get(),
you need to handle synchronization manually if you expect the provider to
be called from different threads.  The same thing applies to the actual
objects Guice injects (ie, non-providers).

I think the catch is that toProvider(SomeProvider.class) is an unscoped
provider binding, so each injection of Provider<T> will create a new
instance of the Provider (I think), so there's no shared state since each
instance is different.  @Provides is analogous to
toProvider(providerInstance), which in turn is analogous to
bind(..).toInstance(..), all of which act as singletons and need to be
thread-safe.

sam

On Thu, Jan 5, 2012 at 12:18 AM, surya aditya <[email protected]> wrote:

> Dear Friends,
>
> In multithreaded environment in multi-core cpu machine, I found
> @provides to be not-thread safe. However if I write Provider class and
> bind using 'toProvider' then it is showing expected behavior.
>
> Is this my right understanding that @Provides is not thread safe. Has
> anybody experienced this before? By not thread safe I mean an instance
> of an object is being reused when i use @provides, ofcourse this was
> totally unacceptable as the Object has instance variable causing
> inconsistencies.
>
> Appreciate feedback.
>
> Peace,
> Surya
>
> --
> You received this message because you are subscribed to the Google Groups
> "google-guice" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-guice?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to