Java基础(三)多线程篇

进程和线程的区别

  1. 进程是正在运行程序的实例,进程包含了线程,每个线程执行不同的任务
  2. 不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间
  3. 线程更轻量,线程上下文切换成本比进程低

创建线程的方式有哪些

  1. 继承Thread类
  2. 实现runnable接口
  3. 实现Callable接口
  4. 线程池创建线程

runnable和callable有什么区别

  1. runnable接口run方法没有返回值
  2. callable接口call方法有返回值,需要future task获取结果
  3. callable接口call方法允许抛出异常,runnable接口的run方法的异常需要内部消化,不能抛出。

run()和start()有什么区别?

  1. run:封装了要被线程执行的代码,可以被多次调用
  2. start:用来启动线程,通过该线程调用run方法执行run方法中所定义的逻辑代码,start方法只能被调用一次。

线程包括哪些状态

 新建T1、T2、T3三个线程,如何保证它们按顺序执行?

可以使用线程中join方法来解决,join本身的作用是等待线程运行结束,所以可以给这三个线程依次 .join(), 表示阻塞调用此方法的线程进入timed_waiting直到上个线程完成后,此线程再继续执行

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

  1. notify:只随机唤醒一个wait线程
  2. noitfyAll:唤醒所有wait的线程

Java中wait和sleep方法的不同?

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

  1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
  2. 使用stop方法强行终止(这个方法不推荐)
  3. 使用interrupt方法中断线程
  • 打断阻塞的线程(sleep、wait、join)的线程,线程会抛出interruptedException异常
  • 打断正常的线程,可以根据打断状态标记是否退出线程

synchronized和lock的区别?

  1. synchronized是关键字,lock是接口
  2. 使用synchronized时,退出同步代码块锁会自动释放,lock的话,需要手动调用unlock方法释放锁。
  3. 他们俩都是悲观锁,都具备互斥、同步、锁重入功能,但是lock提供了许多synchronized不具备的功能,比如公平锁、可打断、可超时等。
  4. 性能方面的话:如果没有竞争时候,synchronized做了许多优化,如轻量级锁、偏向锁。如果竞争激烈时,lock的实现通常会提供更好的性能。

死锁产生的条件和如何进行死锁诊断?

一个线程需要同时获取多把锁,这个样子就会发生死锁

  1. 当程序出现死锁的现象,我们可以使用jdk自带工具:jps和jstack
  2. jps:输出jvm中运行的进程状态信息
  3. jstack:查看Java进程内线程的堆栈信息,查看日志,检查是否有死锁,如果有死锁现象,需要查看具体代码分析后,修复
  4. 可视化工具jconsole,VisualJvm也可以检查死锁问题。

说一下线程的核心参数

 线程池的执行原理

 如何确定核心线程数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值