Java面试题———线程篇①

目录

一,创建线程有几种方式?

二,runnable和callable的区别?

三,start和run的区别?

四,notify和 notifyAll的区别?

五,sleep 和 wait 的区别?

六,请说一下线程的状态及转换?

七,现在有T1,T2,T3三个线程,如何保证它们按顺序执行?


一,创建线程有几种方式?

我知道的创建线程的方式大体上可以分为四种:

  1. 继承Thread类并重写run方法创建线程,这种方式实现简单但线程类不可以再继承其他类

  2. 实现Runnable接口并重写run方法,这种方式避免了单继承局限性,编程更加灵活,实现解耦

  3. 实现Callable 接口并重写call方法,这种方式可以获取线程执行结果的返回值,并且可以抛出异常

  4. 使用线程池创建

二,runnable和callable的区别?

这两个接口都是线程任务类的接口,区别点在于

  1. Runnable接口run方法无返回值;Callable接口call方法有返回值,也就是说如果需要获取线程类的执行结果,必须要使用Callable,如果不需要返回结果,则使用Runnable更简单一些

  2. Runnable接口run方法只能抛出运行时异常,且无法捕获处理;Callable接口call方法允许抛出异常,可以获取异常信息

三,start和run的区别?

run(): 封装了要被线程执行的代码,本质上就是一个普通方法,可以被调用多次

start(): 用来启动线程,底层会自动去执行run方法中的代码,start方法只能被调用一次

也就是启动线程的时候,只能调用start方法,如果调用的run方法,不会启动新线程,而是当普通方法调用执行

四,notify和 notifyAll的区别?

这两个方法都是用户唤醒被wait方法休眠的线程的,区别点在于:

  • notifyAll:唤醒所有wait的线程

  • notify:随机唤醒一个 wait 线程

五,sleep 和 wait 的区别?

        sleepwait都是Java中用来让线程暂时放弃CPU使用权,进入阻塞状态的方法。他们的主要区别点有下面几个:

  1. 方法归属不同:sleep是Thread 的静态方法,而wait是Object的成员方法

  2. 醒来时机不同: sleep会在指定的时间后自动苏醒,而wait需要其他线程的唤醒

  3. 锁特性不同:sleep不会释放锁,而wait会释放锁

  4. 使用限制不同:wait必须用在synchronized代码块中,而sleep无此限制

六,请说一下线程的状态及转换?

        在我的理解中,线程共分为7种状态,分别是:新建就绪运行终止以及阻塞等待计时等待

它们之间的转换关系是这样的:

  1. 当线程new出来之后,没有start之前就会处于新建状态

  2. 当线程执行start方法之后,就进入就绪状态

  3. 当就绪的线程一旦获取到了cpu的执行权,就可以进入运行状态

  4. 当线程执行完了run方法之后,就进入了死亡状态

这是一条正常的流程,但是代码在运行状态下可以因为一些原因进入到其它状态,比如说:

  1. 当进行抢锁操作时,抢锁失败就会进入到阻塞状态

  2. 当代码调用了wait方法时,就会进入等待状态

  3. 当代码调用了sleep方法时,就会进入计时等待状态

这是我对线程状态及其转换的理解

七,现在有T1,T2,T3三个线程,如何保证它们按顺序执行?

        在多线程中有多种方法让线程按特定顺序执行,最简单的方式就是使用线程类的join方法实现

        join方法是Thread类中的一个方法,它的作用是将当前线程挂起,等待其他线程结束后再执行当前线程

        具体来说就是:可以在t2之前调用t1.join(),在t3之前调用t2.join()

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啵啵薯条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值