Processes are heavyweight flows of execution that run concurrently in separate address spaces, while threads are lightweight flows that run concurrently within the same process address space. Active classes represent concurrent flows of control and can be stereotyped as <<process>> or <<thread>>. There are four types of communication between active and passive objects: active to active, active to passive, passive to active, and passive to passive. Synchronization coordinates concurrent flows using sequential, guarded, or concurrent approaches.