1. java中有几种方法可以实现一个线程?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口。

这两种方法的区别是,如果你的类已经继承了其它的类,那么你只能选择实现Runnable接口了,因为Java只允许单继承的。

2. 如何停止一个正在运行的线程?

(1)方法1: 调用Thread.stop()方法停止线程。

Thread.stop()不安全,已不再建议使用。

该方法天生是不安全的。使用thread.stop()停止一个线程,导致释放(解锁)所有该线程已经锁定的监视器(因沿堆栈向上传播的未检查异常ThreadDeath而解锁)。如果之前受这些监视器保护的任何对象处于不一致状态,则不一致状态的对象(受损对象)将对其他线程可见,这可能导致任意的行为。

(2)方法2: Thread.interrupt()

  • 传递InterruptedException。这是最明智的策略,将异常传递给方法的调用者。
  • 恢复中断。在不能上抛的情况下,如Runnable方法,必须捕获InterruptedException,并通过当前线程的interrupt()方法恢复中断状态,这样在调用栈中更高层的代码将看到引发了一个中断。

(3)方法3:停止一个线程最佳实践是 中断 + 条件变量。

中断只是一种协作机制,需要被中断的线程自己处理中断。

停止一个线程最好的做法就是利用共享的条件变量。

3. notify()和notifyAll()有什么区别?

void notify(): 唤醒一个正在等待该对象的线程。
void notifyAll(): 唤醒所有正在等待该对象的线程。

4. sleep()和 wait()有什么区别?

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

5. 什么是Daemon线程?它有什么意义?

所谓后台(daemon)线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这个线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程介绍时,程序也就终止了,同时会杀死进程中的所有后台线程。反过来说,只要有任何非后台线程还在运行,程序就不会终止。必须在线程启动之前调用setDaemon()方法,才能把它设置为后台线程。注意:后台进程在不执行finally子句的情况下就会终止其run()方法。

6. java如何实现多线程之间的通讯和协作?

Java提供了3个非常重要的方法来巧妙地解决线程间的通信问题。这3个方法分别是:wait()、notify()和notifyAll()。它们都是Object类的最终方法,因此每一个类都默认拥有它们。虽然所有的类都默认拥有这3个方法,但是只有在synchronized关键字作用的范围内,并且是同一个同步问题中搭配使用这3个方法时才有实际的意义。这些方法在Object类中声明的语法格式如下所示:

final void wait() throws InterruptedException
final void notify()
final void notifyAll()

  

转载于:https://www.cnblogs.com/yeahwell/p/4544528.html

Java面试题-多线程相关推荐

  1. java面试题 多线程_Java面试常见关于多线程的面试题

    多线程是Java技术中常用而且相对比较难易理解的一个知识点.而且多线程也是企业实际应用中必备的技术,因此在面试的过程中,面试者经常被问到关于多线程的问题,遇到这些问题大家应该怎么办呢?赶紧恶补一下Ja ...

  2. Java面试题--多线程

     什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速. 线程和进程有什么区别? ...

  3. JAVA面试题解惑系列(十)——话说多线程

    JAVA面试题解惑系列(十)--话说多线程 关键字: java 面试题 多线程 thread 线程池 synchronized 死锁 作者:臧圩人(zangweiren) 网址:http://zang ...

  4. Java面试题阶段汇总

    希望能够坚持不断的整理,做最全的Java面试题题库,帮助更多的人在面试过程中发挥出自己的实力.也希望自己能够持之以恒的做一件事情不忘初心,加油! 初级面试题 Java面试题-基础篇一 Java面试题- ...

  5. java面试题_阿里大厂流出的数百道 Java 经典面试题

    BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...

  6. 1000道最新高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构!

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  7. 1000道最新大厂高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  8. 最新1000道高频Java面试题,包含25个技术栈等面试攻略(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  9. 100道Java并发和多线程面试题

    1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓"知其然知其所以然","会用"只是 ...

最新文章

  1. document.getElementById()和document.forms[0].submit()
  2. ***PHP中error_reporting()用法详解(含codeigniter框架中屏蔽错误提示的解决方案)
  3. firebug中html显示为灰色的原因总结
  4. ActiveMQ;RabbitMQ;ZeroMQ
  5. 每秒8.8亿次请求!让数据存得起,看得见 - 云原生多模数据库Lindorm 2020双十一总结
  6. html语言head里面的link示例,Html之head部分详解(示例代码)
  7. Android之提示Could not find com.android.support:appcompat-v7:25.3.1.
  8. php 错误提示模板,php 关闭错误提示方法总结与性能分析
  9. 力扣93. 复原 IP 地址(JavaScript)
  10. LaTex 加粗(加黑)的方式
  11. EntityFramework在root目录web.config中的配置设置
  12. Microsoft Office Professional Plus 2010在安装中出错 解决办法 安装office2010出错
  13. 故事感悟:管道与挑水
  14. 机器人涂装工程师岗位英文缩写_企业各职位英文缩写
  15. 解析肖特基二极管的优缺点及应用
  16. MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询
  17. 德云社怒怼信息泄露 300元买600多明星证件号
  18. K3s Load Balancer(Rancher LB)
  19. 他选歌太纠结了,有时临比赛开始的前一天才能
  20. 量化交易中的资金管理模型分享

热门文章

  1. 通过build.xml在Eclipse中导入工程
  2. 蒙文字体怎么安装_我们来聊一聊iOS13的“字体”该怎么用?
  3. 利用系统级别的光谱成像技术分析细胞器的互作组学
  4. mybatis generator 中文注释_[SpringBoot2.X] 23- 整合持久层技术 -MyBatis - 配置
  5. 目标跟踪算法的分类(一)
  6. 计算机视觉图像去噪原理,图像去噪方法研究进展
  7. rdd分组聚合算子xxByKey,xxBy
  8. scala练习:依据输入的年和月打印该月日历
  9. Linux开发_反编译开发_破解简单登录程序外加缓冲区溢出攻击
  10. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS