Java多线程面试题:Thread类的run()方法可以直接调用吗?
1。进程和线程的区别
进程是一个独立(自包含)的运行环境,可以认为是一个程序或一个应用程序。线程是在进程中执行的任务。 Java运行时环境是包含各种类和程序的单个进程。线程可以称为轻量级进程。线程在进程中创建和驻留需要更少的资源,并且可以在进程中共享资源。
2。多线程编程的优点是什么?
在多线程程序中,多个线程同时运行,以提高程序的效率。 CPU不会进入空闲状态,因为线程必须等待资源。多个线程共享堆内存,因此创建多个线程来执行某些任务比创建多个进程更好。例如,Servlets 比 CGI 更好,因为 Servlets 支持多线程,而 CGI 不支持。
3。用户线程和守护线程有什么区别?
当我们在Java程序中创建线程时,它被称为用户线程。守护线程是在后台运行的线程,不会阻止 JVM 退出。当没有用户线程运行时,JVM 关闭程序并退出。守护线程创建的子线程仍然是守护线程。
4。我们如何创建一个线程?
创建线程有两种方式:一种是实现Runnable接口,然后传递给Thread构造函数来创建Thread对象;另一种是直接继承Thread类。
5。不同的线程生命周期有哪些?
当我们在方法内部时,状态变为 Runnable。线程调度程序为可运行线程池中的线程分配CPU时间,并将其状态更改为“正在运行”。其他线程状态包括等待、阻塞和死亡。
6。我们可以直接调用Thread类的run()方法吗?
当然可以,但是如果我们调用Thread的run()方法,它的行为就会和普通方法一样,在当前线程执行中,在一个新的线程中运行我们的代码,即Thread.start必须使用 () -方法。
7。如何让一个正在运行的线程停止一段时间?
我们可以使用Thread类的Sleep()方法来让线程暂停一段时间。应该注意的是,这并没有结束线程。当线程从睡眠中被唤醒时,线程的状态将变为Runnable,并按照线程调度执行。
8。你对线程优先级的理解是什么?
每个线程都有一个优先级。一般来说,高优先级的线程在执行时会有优先权,但这取决于线程。调度的实现依赖于操作系统。我们可以定义线程的优先级,但这并不能保证高优先级线程会先于低优先级线程运行。线程优先级是一个int变量(从1-10),1代表最低优先级,10代表最高优先级。
9。什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?
线程调度程序是一个操作系统服务,负责为处于可运行状态的线程分配CPU时间。当我们创建一个线程并启动它时,执行取决于线程调度程序。时间切片是指将可用CPU时间分配给可用可执行线程的过程。 CPU 时间的分配可以基于线程优先级或线程等待的时间。线程规划不受影响。
10。什么是多线程中的上下文切换?
上下文切换是保存和恢复CPU状态的过程,它允许线程执行从中断点恢复执行。上下文切换是多任务操作系统和多线程环境中的一个重要功能。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。