_unhandled_input(event) is a Node function. As Thread are not nodes, it would not be called automatically inside your Thread. However, you could start a function inside a Thread yourself whenever you recieve an event from one of your Nodes.
Reading a variable is generally safe, as long as it doesn't matter if it is up to date, it never goes through an invalid State while being updated, and reading it is pure (no side effects). To test thread safety, you can try making a few hundred simultaneous Threads, with a start synced with a Semaphore, all doing your operation a thousand time and asserting that it works well.
However, you seem to want to put Thread in places where they are not really needed and may even detract from you performances. Threads allow you to run very slow functions in parallel, to leverage more cores of your processor. However, launching a Thread itself is not instantaneous, and if you use them for short _unhandled_input(), it may add time instead of removing it.
To see which functions take the most time, Godot has a builtin profiler (Debugger third tab). Also, to see if it is usefull to shave time, you can setup a few Label displaying your favorite Performance.get_monitor() at all time. For more perfomance tips, see the optimisation section of the documentation