As I understand, Java’s Exception class is certainly not immutable (methods like initCause and setStackTrace give some clues about that). So is it at least thread-safe? Suppose one of my classes has a field like this:
private final Exception myException;
Can I safely expose this field to multiple threads?
I’m not willing to discuss concrete cases where and why this situation could occur. My question is more about the principle: can I tell that a class which exposes field of Exception type is thread-safe?
Another example:
class CustomException extends Exception
{
...
}
Is this class thread-safe?
Note that
initCause()issynchronizedandsetStackTrace()copies its parameter and then does a single assignment.So
Exceptionactually does seem to be implemented with thread-safety in mind. Still, I’d be wary of any design where exceptions are routinely passed around between threads (i.e. for any reason other than handling a very serious error condition). It just feels wrong.