ITPub博客

首页 > IT职业 > IT职场 > 浅谈几个常见的多线程面试题

浅谈几个常见的多线程面试题

IT职场 作者:猪三玩区块 时间:2021-04-23 09:46:01 0 删除 编辑

创建线程有几种不同的方式?你喜欢哪一种?为什么?


有三种方式可以用来创建线程:

继承Thread类

实现Runnable接口

应用程序可以使用Executor框架来创建线程池


实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。



概括的解释下线程的几种可用状态。

新建( new ):新创建了一个线程对象;


可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象的 start ()方法。

该状态的线程位于可运行线程池中,等待被线程调度选中,获 取CPU的使用权;

运行( running ):可运行状态( runnable )的线程获得了CPU时间片( timeslice ) ,执行程序代码;

阻塞( block ):阻塞状态是指线程因为某种原因放弃了CPU 使用权,也即让出了 CPU timeslice ,暂时停止运行。

直到线程进入可运行( runnable )状态,才有 机会再次获得 cpu timeslice 转到运行( running )状态。


在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?


监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。

每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。

java 还提供了显式监视器( Lock )和隐式监视器( synchronized )两种锁方案。





来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69998181/viewspace-2769428/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
区块链开发:威电18948002702

注册时间:2021-04-12

  • 博文量
    11
  • 访问量
    6905