- who schedules the thread?
Operating System. Though, at application level, your JRE can schedule application-level threads based on the thread priority; still it'll get scheduled finally by the scheduler(scheduling block) of OS. User level threads are managed by a user level library, but they still require a kernel system call to operate.
- does the thread scheduler gets overridden anywhere?(like OS thread being overridden by JVM thread scheduler)
The Java runtime environment supports a very simple, deterministic scheduling algorithm called fixed-priority scheduling. The actual scheduler is unique in OS; and looks after scheduling of threads from overall perspective, not from Java/application level perspective.
- how do i change from preemptive scheduling to time slicing scheduling ? or vice versa?
You can't change the nature of scheduling of scheduler, unless you modify the OS kernel, which is lower-level stuff. Even in JRE, you can't change the thread scheduling at the application level.
Attribution: Thread Scheduling tutorial
.