JAVA多线程高并发面试题总结

ReadMe : 括号里的内容为补充或解释说明。

多线程和高并发是毕业后求职大厂面试中必问的知识点,自己之前总是面试前才去找相关的知识点面试题来背背,隔段时间又忘了,没有沉淀下来,于是自己总结了下相关的知识点。

多线程

1. 进程和线程之间有什么不同?

  进程是一个独立的运行环境,它可以被看作是一个程序或者一个应用。而线程是在进程中执行的一个任务。进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位。进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能。好比Java运行环境是一个(包含了不同的类和程序的)单一进程。

想理解的更深刻,请点击进程与线程的区别

2. Thread 类中的start() 和run() 方法有什么区别?

   1)  start()被用来启动新的线程,run()不能

   2)start()不能被重复调用,run()可以。

   3)start()中的run代码可以不执行完就继续执行下面的代码,即线程转换,如果直接调用run()必须等待其代码全部执行完才能继续执行下面的代码。

   4)start()实现了多线程,run()没有实现多线程

3.  在多线程中,什么是上下文切换?

  上下文切换是存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。是多任务操作系统和多线程环境的基本特征。

4. Java中的volatile 变量是什么?

volatile是一个特殊的修饰符,只有成员变量(类的成员变量、类的静态成员变量)才能使用它。

volatile修饰之后就具备了两层语义:

  1)保证了不同线程对这个变量进行操作时的可见性(即一个线程修改了某个变量的值,这新值对其他线程来说是即刻可见的)

       2)禁止进行指令重排序。

高并发

猜你喜欢

转载自www.cnblogs.com/liaowenhui/p/11184884.html