- run multiple threads (extending the Thread class)
- run multiple threads (implementing the Runnable interface)
- synchronize multiple threads using binary semaphores
- "eating philosophers" problem
- synchronize multiple threads using wait(), notify(), notifyAll()
- "producers and consumers" problem
- synchronize multiple threads using lock and conditions
- "producers and consumers" problem
- observe starvation
- cause a deadlock
- extract buffer out of the monitor
- implement producers and consumers problem using active object pattern
- compare active object and monitor based approaches
- write report showing differences, between performance of active object and monitor based approaches
- install jcsp library
- implement producers/consumers problem according to csp pattern