Java thread scheduling uses preemptive priority-based scheduling - higher priority threads can preempt lower priority threads. However, this is not guaranteed to be strictly preemptive as JVM implementations may use different scheduling strategies, and thread behavior is platform-dependent.