I was mindful of this, which is why the method constructs new sets of included files and excluded files and then assigns them at the end, rather than mutating the existing sets in place. Also, I wrote a unit test that accesses the same instance with multiple threads, see the ApplicationLogsReaderReturnsTheCorrectResultsWhenAccessedByMultipleThreads test.