one)
In designing applications, it’s important to differentiate between code requirements and unbounded code. If your class makes it easy, it’s usually a sign that encapsulation is out the window.
In developed applications, it is important to distinguish between requirements imposed on static (limited) and dynamic (unlimited) code. If your class does not fit the requirements for dynamic (unlimited) code, then there is a sign that the encapsulation is out of the window. What is "bounded code and unbounded code" and how to understand the last sentence?
2) And what is Caller-provided locking and caller-ensured locking?