# OS Level Threads Threads in java are managed by the underlying operating system that the JVM is running on. These threads are often referred to as OS level threads and are more heavy than is often necessary. It might require 1 to 2 MB of stack space to be allocated for each thread created. ## Project LOOM OS level threads are too heavy, therefore project LOOK is looking to solve this by making lightweight threads that are managed by the application (JVM) instead of the operating system. # Stopping A Thread The java Thread class has a stop method which you should never call to stop a thread. The stop method does not provide any guarantees about what state the thread is stopped in. All Java objects a thread has access to during execution would be left in an unknown state when the stop method is used. If Other threads in your application also have access to the same objects, your application would fail unexpectedly and unpredictably. Therefore, it is recommended to manage the stopping of threads ourselves. # Daemon Threads By default, the JVM will stay alive as long as any remaining threads are running even if the main thread terminates. If you do not want a thread to keep the JVM alive if it is the only thread running, then you have to mark it as a daemon thread. Daemon threads are stoped in an undefined state. If stopped in the middle of executing code, they can cause undesirable side effects. Therefore, make sure they are in a safe place when stopped. # Join A Thread It is possible for one thread to wait for another thread to terminate (die) before it can continue executing.