Richard Whaling
Spantree Technology Group LLC
A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. These systems show unmistakable signs of unregulated growth, and repeated, expedient repair. Information is shared promiscuously among distant elements of the system, often to the point where nearly all the important information becomes global or duplicated. The overall structure of the system may never have been well defined. If it was, it may have eroded beyond recognition. Programmers with a shred of architectural sensibility shun these quagmires. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems.
— Brian Foote and Joseph Yoder, Big Ball of Mud.
CompletableFuture.supply() [create]
CompletableFuture.run() [create]
CompletableFuture.get() [receive]
CompletableFuture.join() [receive]
CompletableFuture.thenCompose()
CompletableFuture.handle()
CompletableFuture.thenApply()
CompletableFuture.thenAccept()
CompletableFuture.thenRun()
CompletableFuture.run().thenRun().get()
CompletableFuture.applyToEither
CompletableFuture.acceptEither
CompletableFuture.runAfterEither
CompletableFuture.anyOf() [returns Object]
CompletableFuture.allOf() [returns void]
CompletableFuture.thenAcceptBoth()
CompletableFuture.runAfterBoth()
Most CompletableFuture methods come in 3 varieties:
thenAccept(Consumer<? super T> action) thenAcceptAsync(Consumer<? super T> action) thenAcceptAsync(Consumer<? super T> action, Executor executor)
These affect when and where the action will be executed.