JCIP defines annotations @ThreadSafe and @NotThreadSafe
see: http://jcip.net/annotations/doc/net/jcip/annotations/package-summary.html
If a class is marked @ThreadSafe then all sub-classes must also be marked @ThreadSafe, otherwise it is a violation.
If a class is marked@ThreadSafe then all parent classes must also be marked @ThreadSafe, otherwise it is a violation.
If a class is marked @NotThreadSafe then all parent classes must also be marked @NotThreadSafe, otherwise it is a violation
As a rule property, allow the user to configure:
* the package and class name of @ThreadSafe (in case they define their own)
* the package and class name of @NotThreadSafe (in case they define their own)
* a list of classes that are known to be @ThreadSafe (for 3rd party lib integration)
* a list of classes that are known to be @ThreadUnsafe (for 3rd party lib integration).