【15期】谈谈这几个常见的多线程面试题
程序员的成长之路
共 1895字,需浏览 4分钟
·
2020-08-18 02:34
阅读本文大概需要 3 分钟。
以下几道题目比较初级,是必须要掌握的多线程基础面试题。
创建线程有几种不同的方式?你喜欢哪一种?为什么?
继承Thread类
实现Runnable接口
应用程序可以使用Executor框架来创建线程池
概括的解释下线程的几种可用状态。
等待阻塞:运行( running )的线程执行 o . wait ()方法, JVM 会把该线程放 入等待队列( waitting queue )中。
同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。
其他阻塞: 运行( running )的线程执行 Thread . sleep ( long ms )或 t . join ()方法,或者发出了 I / O 请求时, JVM 会把该线程置为阻塞状态。当 sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。
同步方法和同步代码块的区别是什么?
同步方法默认用this或者当前类class对象作为锁;
同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;
在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
什么是死锁(deadlock)?
如何确保N个线程可以访问N个资源同时又不导致死锁?
互斥条件:一个资源每次只能被一个进程使用。
保持和请求条件:一个进程因请求资源而阻塞时,对已获得资源保持不放。
不可剥夺性:进程已获得资源,在未使用完成前,不能被剥夺。
循环等待条件(闭环):若干进程之间形成一种头尾相接的循环等待资源关系。
推荐阅读:
微信扫描二维码,关注我的公众号
朕已阅
评论