An example of active object pattern in Java.4
Firstly we can see a standard class that provides two methods that set a double to be a certain value. This class does NOT conform to the active object pattern.
The class is dangerous in a multithreading scenario because both methods can be called simultaneously, so the value of val (which is not atomic—it's updated in multiple steps) could be undefined—a classic race condition. You can, of course, use synchronization to solve this problem, which in this trivial case is easy. But once the class becomes realistically complex, synchronization can become very difficult. 5
To rewrite this class as an active object, you could do the following:
Another example of active object pattern in Java instead implemented in Java 8 providing a shorter solution.
Douglas C. Schmidt; Michael Stal; Hans Rohnert; Frank Buschmann (2000). Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects. John Wiley & Sons. ISBN 0-471-60695-2. 0-471-60695-2 ↩
Bass, L., Clements, P., Kazman, R. Software Architecture in Practice. Addison Wesley, 2003 ↩
Lavender, R. Greg; Schmidt, Douglas C. "Active Object" (PDF). Archived from the original (PDF) on 2012-07-22. Retrieved 2007-02-02. https://web.archive.org/web/20120722180050/http://www.cs.wustl.edu/%7Eschmidt/PDF/Act-Obj.pdf ↩
Holub, Allen. "Java Active Objects - A Proposal". Archived from the original on 2013-06-22. Retrieved 2014-06-16. https://web.archive.org/web/20130622122643/http://pragprog.com/magazines/2013-05/java-active-objects ↩