聊聊你对多线程的理解

目录

文章内容

什么是线程?

线程的创建?

线程的生命周期?

sleep()与wait()的异同?

synchronized和Lock的区别?


文章内容

可以考虑从什么是线程?到线程的创建,以及线程的生命周期,说说线程的几个方法,再到线程安全问题引出synchronized关键字与Lock进行比较。

什么是线程?

线程是cpu调度的最小单位。

线程的创建?

1.继承Thread类2.实现Runnable接口3.实现Callabel接口4.线程池

开发中:优先选择:实现Runnable接口的方式原因:

1.实现的方式没有类的单继承性的局限性。
2.实现的方式更适合来处理多个线程有共享数据的情况。
 

如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大?

1. caLL()可以有返回值的。

2. caLL()可以抛出异常,被外面的操作捕获,获取异常的信息。

3. Callable是支持泛型的。

线程的生命周期?

新建 就绪 运行 阻塞 等待 死亡。

最好可以把图画出来。

sleep()与wait()的异同?

两个方法一旦执行 线程则进入阻塞状态。

sleep()是Tread类的,而wait()是Object类的。

sleep()任何场景下都可以调用,wait()只能在同步代码块或者同步方法中调用。

sleep()不释放锁,wait()释放锁。

synchronized和Lock的区别?

synchronized是隐形锁,出了作用域自动释放,Lock是显性锁,需要手动开启和关闭锁。

synchronized有代码块锁和方法锁,Lock锁只有代码块锁。

synchronized是语言级别的重量级锁,性能低,Lock锁是轻量级锁,性能好扩展性好。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我想要的我会认真

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

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

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

打赏作者

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

抵扣说明:

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

余额充值