I am a novice programmer interested in the Julia language. The documentation (https://docs.julialang.org/en/v1/base/multi-threading/) says Threads.@threads is for "for" loops and theads.@spawn places a given task on any available thread. My understand is that Threads.@threads is inherently synchronized while the threads.@spawn method is asynchronous and needs more planning to implement (namely using the fetch() method).
In code I find online using both, I seem to see the two used interchangeably (from my perspective). What is the conceptual difference between the two for a novice programmer and how/when should we implement each? Additionally, can they complement each other?