QUEUE or SYNC are usable to get a visible contention.
Suggestion
SYNC with 3 states : AVAILABLE, IN_USE, LOCKED
AVAILABLE => job can start
IN_USE => job must wait as another job is running
LOCKED => no job can run, something is prohibiting run of any job
pro for SYNC :
- unlimited number of objects can refer the SYNC object
- possibility to monitor the SYNC and have a logging of the activity
- attached to the object, regardless how it is used
- works regardless how it is activated but can be bypassed ("ignore sync function in activity window")
pro for QUEUE :
- simple monitoring
- unlimited number of objects
- can be modified dynamically to accept more parallel run (careful if application logic doesn't support parallel runs !)
- can stop runs by simply stop the QUEUE or set it to accept 0 object activation
Cons for SYNC :
- not a familair object for many people
- need to be set properly to work without trouble (not too many states please !)
- not visible in the activity window, only status can say if object is in waiting status for SYNC to be available
- cannot be dynamically modified for allowing multiple parallel runs
Cons for QUEUE :
- is permanently in the activity window regardless of the usage => too many QUEUE to monitor if this option is largely used
- attribute can be overriden by upper level attribute (Job vs Workflow, Workflow vs Schedule, Objects in JOBGROUP, ....)
- no log of activity of objects in the QUEUE like for the Agents
Hope this can help you to make a choice.