Synchronization with Tablet$Scanner via a read() will block close() being called via the sweep method in TabletServer. As a result, the SimpleTimer thread does not continue, and idle threads grow until the scan completes.
My patch, which is forthcoming, converts synchronized methods to use a fair lock. If the lock is held by a read call, the close call will attempt to obtain it, time out, and return indicating a close was not successful. The sweep will continue, and the SimpleTimer thread will respawn later, attempting closure on those Tablets at a later time.