I am writing highly concurrent application, which is extensively modifies objects of MyClass. The class is composed of several fields. My question is how to prevent modifications of particular object during its serialization by another thread?
Regards, Matt
By synchronizing both the methods which serialize and modify the object state.
Why modify MyClass? A better approach (and much easier to deal with concurrently) is to create new immutable versions of your state object and CAS them with an AtomicReference when updating. Eg:
final class MyClass {
final int age;
final String name;
final String address;
MyClass(int age, String name, String address) {…}
MyClass setNameAndAddress(String name, String address) {return new MyClass(age, name, address);}
}
Then serialization is not a problem as you are dealing with an immutable object. Your stored reference can only change from one valid state to another, and multiple updates can be performed atomically.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With