Solved

Should calls to new() be protected by synchronized block?

Posted on 2006-06-12
13
215 Views
Last Modified: 2010-03-31
As we know, each thread is awarded a Java stack, which contains data no other thread can access, including the local variables, parameters, and return values of each method the thread has invoked. What about the object references?

Consider  the following method:

Myclass1 func(Myclass2 obj2)
{
 Myclass1 obj1 = new Myclass1(obj2);
 return obj1;
}

Assume that this method is being called by many threads simultaneously, each passing its own value for obj2, should I protect th execution of line Myclass1 obj1 = new Myclass1(obj2) through a synchronized block?
0
Comment
Question by:vi_sharma
  • 6
  • 5
13 Comments
 
LVL 92

Assisted Solution

by:objects
objects earned 20 total points
ID: 16883972
no, each thread woill have its own copy of local vars
0
 

Author Comment

by:vi_sharma
ID: 16884001
True, obj1 will be local variable for each thread, but the object it refers to,  which is created using new MyClass(obj2) won't be. Each thread may pass a different value for obj2, so I am wondering if it will lead to some inconsistencies?
0
 
LVL 30

Expert Comment

by:mayankeagle
ID: 16884004
See any book on Principles of Programming languages to know how a new activation record is created for each function call having its own copy of local variables, etc
0
 

Author Comment

by:vi_sharma
ID: 16884018
Mayank, this is little more for me to grasp. Could you please give a dumbed-down explanation of how a new activation record relates to my query on objects on heap being shared by threads?

Thanks.
0
 
LVL 30

Expert Comment

by:mayankeagle
ID: 16884026
Whenever a function/ method is called, a new record for it is created on the stack. This is the activation record of the function that stores its state - in terms of parameter-values, values of local variables, return-address, etc. It is separate for each function 'call', so even if the same function is called 3 times from 3 different places, they will have 3 separate records. The references could refer to same objects, though, in the heap, if they are assigned that way to a shared object.
0
 
LVL 30

Expert Comment

by:mayankeagle
ID: 16884030
In your case, since obj2 is referring to a different object in every 'call', it is fine.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:vi_sharma
ID: 16884044
Mayank, thanks. But I still didn't get this - would a new MyClass() executed by thread 1 would result in return reference value to be falsely used by thread 2? If so,  I need to use synchronized block to prevent that.
0
 
LVL 30

Accepted Solution

by:
mayankeagle earned 30 total points
ID: 16884053
No - they are 2 different function-calls, 2 different activation records, 2 different objects and 2 different references to those objects, so it should be fine.
0
 

Author Comment

by:vi_sharma
ID: 16884098
Thanks! clear now.
0
 
LVL 30

Expert Comment

by:mayankeagle
ID: 16884107
Glad to help - you should've split because objects' comment was also correct. I'll ask Venabili (our Page Editor).
0
 

Author Comment

by:vi_sharma
ID: 16884145
Cool. That's fine - you can ask her(him?). I would prefer 30-20 split (30 for you as you spent more time on this with me :-))
0
 
LVL 30

Expert Comment

by:mayankeagle
ID: 16884155
Done - asked her.
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
HashMap Vs TreeMap 12 49
@SBGen Method 3 25
what is the difference between "sudo su" and "su - root" 6 75
maven project error 5 24
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now