... what's the best way to ...
Stop asking such questions, because there's never the best way.
It all depends on how your game works, what it should actually do, etc. etc. There are thousands of possible way to do things, but not all of them will fit your needs. It's the same thing with game engines, don't build general game engines but build an engine around a game.
For the calculation it also depends on the game, because if the game is time critical, you have to handle things differently as when it's turn-based or similar.
You can for instance calculate the real position on the server, but also let the client calculate the physics to interpolate between the syncs with the server, so the client kind of guess where everyone is moving and when the new positions come from the server, they get reset.
Threads are not some paradigm one should use whenever wanted, but when the make sense. Threads execute code side by side and thus can bring some high complexity into the code. For rendering/updating it's often nearly impossible to use and thus I'd probably only use it where you need to do things at the same time and the 'things' are not directly connected to the outside, e.g. loading new textures in the background, playing music in the background, communicating over the network, etc.
There are many many tutorials on multiplier games, if they are good I can't say and also don't have any experience there, but I guess since you don't have much knowledge on the topic, nearly very tutorial will do the trick for now.