-
Passing params by ref
Here is sample code.
Parser.java:
Code:
package org.parser.ts;
import java.io.InputStream;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
public class Parser {
public Result parse(InputStream xmlStream) throws XMLStreamException {
Result result = new Result();
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(xmlStream);
while(reader.hasNext()) {
if(reader.isStartElement() && reader.getLocalName().equals("Person")) {
parsePerson(reader, result);
}
if(reader.isEndElement() && reader.getLocalName().equals("Person")) {
break;
}
reader.next();
}
return result;
}
private void parsePerson(XMLStreamReader reader, Result result) throws XMLStreamException {
reader.next();
while(reader.hasNext()) {
if(reader.isStartElement()) {
if(reader.getLocalName().equals("FirstName")) {
result.setFirstName(reader.getElementText());
} else if (reader.getLocalName().equals("LastName")) {
result.setLastName(reader.getElementText());
}
}
if(reader.isEndElement() && reader.equals("Person")) {
break;
}
reader.next();
}
}
}
and Result.java
Code:
package org.parser.ts;
public class Result {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Is this code thread safe? Is passing 'person' (local variable) to method 'parsePerson()' by reference, as I did here, thread safe? And more important question is why? I really want to understand why it is/isn't thread safe
-
Yes, this code is thread safe. Because all data are saved on the stack of the thread. There is no object that are shared between different calls of different threads.
If you would safe the Result object as member variable in the Parser then there is only one place for all threads to safe different results.
I hope this answer your question.
-
Thank you very much for your answer and your time.