Thread safety and performance when multiple threads write into same Writer
Making the lineCounter volatile will not help here. If synchronized is not used, the following sequence of actions is possible:


Thread A writes something to a file. 
Thread B writes something to a file. 


If the lineCounter was equal to maxLines - 1 before the first step, the behavior of the program is obviously incorrect. 

As you have said, you need to synchronize a group of actions(write, close, addFile, open). That's why you need to use synchronized(or a Lock).

About performance: are you sure that synchronization is really an issue? Did you profile your code or are you just making guesses? Before making things more complicated, you should make sure that it will actually solve the problem.