So, I have been working on a new plugin feature, and with this new feature, there is an ArrayList of "FriendList" objects (These are simply containers for a UUID and an ArrayList of UUIDs, you can probably figure out how it works). Then there is also a file with all of these FriendList objects written to it for permanent storage. Now, when a player joins the server, the file is read, and if the player has a FriendList associated with them, it loads it. And if a player leaves, then the ArrayList containing all the FriendLists is checked, and if a match is found, it is removed from memory. This may sound all good, but my concern is, suppose we have a server of 120 people, all with FriendLists. How's it gonna do when its calling read/write/memory actions every single time someone joins or leaves? That's 120 objects to check, just when a player leaves, or in the case of a join, 120 YAML entries to check. And considering that players come and go all the time on large servers, that is going to be a LOT of read/write/memory operations over a little ArrayList. So, I have to think async might be a good idea... ... But is it going to be safe? The Bukkit wiki says Bukkit API should never be accessed, which is not a problem, I can make the UUIDs needed final local variables before the runnable is called, but it also says shared Collections should not be accessed in async. Slightly concerning, since ArrayList implements AbstractList, implements Collection. And I use SnakeYaml (comes with the API) for handling the storage file, too. I know the answer is likely going to be very subjective to what I am doing with my code, but I at least want to know if there is an absolute no, SnakeYaml in async will destroy everything or something like that.