Hi Raju,
in general all SHARED and MUTABLE data have to be synchronized if it could be a problem in your application when more than one
thread has access to it! It doesn't matter if the data (= variables) are public themselves or you directly expose them via public methods.
But as easy as this may sound it's usually up to the programmer to decide which data could be accessed concurrently and if this could lead to problems. If some data are guaranteed not to be shared among several threads or perhaps it's simply not that critical if the shared data are consistent all the time you may decide to ignore concurrency effects. Of course in most cases you wouldn't want to risk inconsistent data though.
Marco