• Post Reply Bookmark Topic Watch Topic
  • New Topic

Confused about thread safety

 
Miroslav Krivoklat
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I think I'm misunderstanding something very fundamental about method synchronization and thread safety. Here's some example code from Java's String class about what I'm not grasping. Notice that the toUpperCase method is public and NOT synchronized. It calls the upperCaseIndex method which is also not synchronized but IS static. So, this doesn't seem safe to me. Meaning, couldn't two instances of String have the method toUpperCase called, and wouldn't they be in danger of both executing the upperCaseIndex method at the same time, overwriting each other's local variables?


public String toUpperCase(Locale loc)
{
...
...
if (expand > 0)
{
int index = upperCaseIndex(ch);
while (expand-- >= 0)
newStr[j++] = upperExpand[index++];
}
...
...
}


private static int upperCaseIndex(char ch)
{
// Simple binary search for the correct character.
int low = 0;
int hi = upperSpecial.length - 2;
int mid = ((low + hi) >> 2) << 1;
char c = upperSpecial[mid];
while (ch != c)
{
if (ch < c)
hi = mid - 2;
else
low = mid + 2;
mid = ((low + hi) >> 2) << 1;
c = upperSpecial[mid];
}
 
Mr. C Lamont Gilbert
Ranch Hand
Posts: 1170
Eclipse IDE Hibernate Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Local variables are not local to the method, they are local to the method invocation. When the thread finishes invoking the method, those variables disappear. When another thread invokes the method, it gets its own set of variables. Two threads can not communicate by sharing 'local' variables because they can not see each others local variables.
 
Miroslav Krivoklat
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
OK - that makes sense to me now. Thanks much...
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!