You might not have thought of this, but it is quite trivial to run multiple Applicets (of the same or different Applicet subclass) simultaneously in the same JVM. All you have to do is create them and invoke runAsApplication() on them from within the same main(String) method or one of it's callees. Running in the same JVM, these Applicets can intercommunicate quite easily.
Applet's running in browsers also have a form of memory sharing and persistence: any static field in an Applet or in one of the classes it loads, will persist over the runtime environment until the class is unloaded (probably for reclaiming memory). A runtime environment may be defined as codebase + qualified classname. Prior to unloading a class, the browser JVM will call it's method static void classFinalize(), if implemented.
According Netscape documentation, loaded classes will get reused whenever the following conditions are met:
What does this mean? Applets can communicate with each other even when they are not on the same Web page. When the user runs Applets from the same CODEBASE etc. on 2 or more different HTML docs, simultaneously, consecutively, or intermittently, the static fields are not be reset, i.e. their values are shared/used persistently. This also means that you could take along some user data (e.g. search terms, active scripting, surfing path, shopping basket) across different HTML docs, without resorting to cookies or server-side programming! There is one problem that might apply if you are doing something that requires applets to stay active after the user moves on from the applet's page: pruning. Under certain circumstances (such as when the browser's in-memory cache is full) the browser will forcibly destroy and unload applet classes. Each browser will probably have a different pruning policy. There's nothing you can do to avoid it, but you can take action when it happens by overriding Applet.destroy().