Java多线程常见面试题

Posted 潜于深山,跃向苍穹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程常见面试题相关的知识,希望对你有一定的参考价值。

1、进程与线程的区别?

  一个进程是一个独立运行的环境,他可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。

2、多线程编程的好处是什么?为什么要使用多线程?

  就是为了提高系统资源的利用率。

3、用户线程与守护线程有什么区别?

  当我们在Java程序中创建一个线程,它就被称为用户线程。一个守护线程是在后台执行并且不会阻止JVM终止的线程。当没有用户线程执行的时候,JVM关闭程序并且退出(这里我感觉守护线程也会关闭)。一个守护线程的子线程也是守护线程。

4、创建线程的方式?如何创建一个线程?

  • 实现Runnable接口,重写run()方法(比较常用)
  • 继承Thread类,重写run()方法

5、volatile和synchronized区别

  volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字性能要好。

  但是volatile关键字只能用于变量,而synchronized关键字还可以修饰方法和代码块。

  

  synchronized关键字在JavaSE1.6之后进行了主要包括了为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其他各种优化之后效率显著提升,实际开发中使用synchronized关键字的场景还是更多一些。

 

  多线程访问volatile关键字不会法神碰撞,而synchronized关键字可能发生阻塞。volatile关键字保证数据的可见性,但是不保证数据的原子性,synchronized关键字两者都能保证。volatile关键字主要用于解决变量在多个线程之间的可见性,而synchronized关键字解决的是多个线程之间访问资源的同步性。

 

  synchronized保证三大性质:原子性、有序性、可见性

  volatile保证: 有序性、可见性、不保证原子性

6、sleep方法与wait方法有什么区别?

  sleep方法和wait方法都可以用来放弃CPU一定的时间暂停当前运行的线程,不同点在于:如果线程持有对某个线程的监锁,sleep方法不会释放这个对象的锁,wait方法会释放这个对象的锁,sleep必须要设定时间,而wait方法可以设定也可以不设定。

  sleep属于Thread类,wait属于Object类。

7、什么是多线程的上下文切换?

  多线程的上下文切换是指CPU控制权由一个已经正在运行的线程切换到另外一个就绪并等待获取CPU执行权的线程的过程。

8、什么是线程局部变量ThreadLocal? 

  

 

 

9、线程池中submit()和execute()方法有什么区别?

   两个方法都可以向线程池提交任务,execute()方法返回类型是void,它定义在Executor接口中,而submit()方法可以返回持有计算结果的Future对象。

10、start与run的区别?

  1. start()方法来启动线程,真正实现了多线程运行。这时这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码。
  2.    

11、进程与线程的区别? 

12、进程与线程的区别? 

13、进程与线程的区别? 

14、进程与线程的区别? 

15、进程与线程的区别?  

  

以上是关于Java多线程常见面试题的主要内容,如果未能解决你的问题,请参考以下文章

Java 并发常见面试题总结(上)

Java多线程常见面试题-第三节:线程安全集合类和死锁

Java多线程常见面试题-第三节:线程安全集合类和死锁

2020最新Java常见面试题及答案

Java多线程常见面试题-第二节:JUC(java.util.concurrent)

Java多线程常见面试题-第二节:JUC(java.util.concurrent)