Java宝典——高效的并发线程

并发编程是Java基础部分,也是面试常考的问题


1、进程与线程的区别?
答:进程是计算机最小的资源分配单位,说白了就是一个可独立运行的程序。线程是计算机中最小的执行单位,由进程创建。
区别:
进程能独立运行,本身拥有资源;线程必须依靠于进程才能运行,线程本身不拥有资源,除非程序员用local thread分配资源。
线程是由进程创建的,一个进程可以创建多个线程;进程死,线程全部陪葬;线程死,进程不受影响。
进程切换涉及CPU和资源调配问题,而线程之间的切换只涉及寄存器。
2、多线程与单线程的关系?
答:多线程指一个进程中拥有数量大于1的线程,其每个线程都是相对于其他线程来说一个独立的执行体,而且线程之间的切换在单核CPU中存在上下文切换,其切换方式为时间片轮转;对于单线程来说,不存在上下文(环境)切换,不存在时间片轮转。
多线程一般用线程池管理,用于节省系统资源。
3、线程的状态有哪些?
答:七个,new新建,runable可运行,running运行,block阻塞,wait等待,timed wait定时等待(挂起),terminated终止。
4、线程活性故障有哪些?分别解释一下。
答:死锁,活锁,锁死,饥饿

  • 死锁:资源需求环。(不可剥夺,相互等待,资源互斥,请求保持)
  • 活锁:求而不得(请求某种资源而一直得不到)
  • 锁死:指线程一直无法唤醒。产生原因有二:嵌套锁和信号量丢失
  • 饥饿:想去完成某种任务,但有资源,请求不到。
    5、线程的安全特性以及其解释?
    答:线程的安全特性有三:
  • 原子性:线程内部对事务的操作,其他线程不可见。
  • 可见性:线程对共享资源的操作,可以反馈到其他线程上。
  • 有序性:内存中操作在其他处理器看来是有序的。
    6、谈谈你对synchronized关键字的理解。
    答:synchronized是Java提供的重量级锁,其作用是锁住关键资源,防止其他线程修改。其底层实现是一个计数器,每当所修饰的成员处于未访问状态时,其底部计时器值未改变;若是处于访问状态时,先对底部计数器改变,然后再进行相应的操作。
    7、谈谈你对volatile关键字的理解。
    答:volatile是一种轻量级锁,可以保证资源的可见性,有序性,但不保证原子性。如其改变某个资源时,其他线程可以对此资源进行访问,但此访问只能读,而不能写。
    8、ReentrantLock和synchronized的区别:
    答:ReentrantLock是一种可重入锁,其锁需要手动申请和释放,保证了资源控制的进一步加强,同时一定程度上避免了死锁的发生(依赖API)。synchronized是一种重量级锁,被锁住的成员只有执行完之后,才会释放此锁,从而让其他对象访问(依赖JVM)。
    9、Java中的线程池有了解吗?
    答:有,线程池可以把他想想成一个装满线程的池子,主要是解决线程频繁创建和销毁所浪费的资源的一种状况。线程池必须具有如下三个特性,分别是最大容量,最小容量,以及核心容量。

猜你喜欢

转载自blog.csdn.net/qq_44503987/article/details/112726765