【面试题】线程并发

一、创建线程的方法

1、继承Thread类
2、实现Runnable接口
3、实现Callable接口
4、创建线程池获取线程

二、线程的状态

1、NEW状态
2、Runnable状态
3、Blocked状态
4、waiting状态
5、Time_Waiting状态
6、Terminated状态,终止(结束)状态
在这里插入图片描述

三、java中的wait和sleep方法的区别?

共同点

wait()、wait(long)和sleep(long)的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态?(不是进入waiting状态吗?)

不同点

1、方法归属不同
  • sleep(long) 方法时Thread的静态方法
  • wait()、wait(long)都是Object的成员方法,每个对象都有
2、醒来时机不同
  • 执行sleep(long)和wait(long)的线程都会在等待相应毫秒后醒来
  • wait(long)和wait()还可以被notify()(随机唤醒一个线程)和notifyAll()方法唤醒,wait()方法如果不被唤醒就会一直等待下去。
  • 他们都可以被打断唤醒
3、锁特性不同(重点)
  • wait方法的调用必须先获取wait对象的锁,而sleep方法则无此限制
  • wait方法执行后会释放对象的锁,允许其他线程获得该对象的锁
  • 而sleep方法如果在synchronized代码块中执行,执行后也不会释放对象的锁(我释放了CPU,但是你们也用不了)。

四、如果停止一个正在运行的线程?

有三种方式可以停止线程
1、使用退出标志,使线程正常退出
2、使用stop方法强制退出(不推荐,stop方法已失效)
3、使用interrupt方法中断线程
- 打断阻塞的线程(sleep、wait、join)的线程,线程会抛出InterruptedException异常
- 打断正常的线程,可以根据打断状态来标记是否退出线程

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值