Solved

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

Posted on 2006-06-12
13
222 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:Mayank S
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
Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

 

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:Mayank S
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:Mayank S
ID: 16884030
In your case, since obj2 is referring to a different object in every 'call', it is fine.
0
 

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:
Mayank S 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:Mayank S
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:Mayank S
ID: 16884155
Done - asked her.
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to get all the API from website? 11 104
java example issue 3 19
running on tomcat not jboss eap 7.0 3 17
Eclipse for Java EE development 2 25
For customizing the look of your lightweight component and making it look opaque like it was made of plastic.  This tip assumes your component to be of rectangular shape and completely opaque.   (CODE)
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…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

792 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