Java多线程面试题:可以直接调用Thread类的run()方法么?

2019-05-3116:42:07后端程序开发Comments4,788 views字数 1335阅读模式

  1. 进程和线程的区别文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  2. 多线程编程的好处是什么?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态。多个线程共享堆内存(heap memory),因此创建多个线程去执行一些任务会比创建多个进程更好。举个例子,Servlets比CGI更好,是因为Servlets支持多线程而CGI不支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  3. 用户线程和守护线程有什么区别?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

当我们在Java程序中创建一个线程,它就被称为用户线程。一个守护线程是在后台执行并且不会阻止JVM终止的线程。当没有用户线程在运行的时候,JVM关闭程序并且退出。一个守护线程创建的子线程依然是守护线程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  4. 我们如何创建一个线程?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

有两种创建线程的方法:一是实现Runnable接口,然后将它传递给Thread的构造函数,创建一个Thread对象;二是直接继承Thread类。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  5. 有哪些不同的线程生命周期?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

当我们在方法时,状态被改变为Runnable。线程调度器会为Runnable线程池中的线程分配CPU时间并且讲它们的状态改变为Running。其他的线程状态还有Waiting,Blocked 和Dead。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  6. 可以直接调用Thread类的run()方法么?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

当然可以,但是如果我们调用了Thread的run()方法,它的行为就会和普通的方法一样,是在当前线程执行,为了在新的线程中执行我们的代码,必须使用Thread.start()方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  7. 如何让正在运行的线程暂停一段时间?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

我们可以使用Thread类的Sleep()方法让线程暂停一段时间。需要注意的是,这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为Runnable,并且根据线程调度,它将得到执行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  8. 你对线程优先级的理解是什么?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个int变量(从1-10),1代表最低优先级,10代表最高优先级。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  9. 什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

线程调度器是一个操作系统服务,它负责为Runnable状态的线程分配CPU时间。一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现。时间分片是指将可用的CPU时间分配给可用的Runnable线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时间。线程调度并不受到。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  10. 在多线程中,什么是上下文切换(context-switching)?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

上下文切换是存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。上下文切换是多任务操作系统和多线程环境的基本特征。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/13242.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/13242.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定