多线程学习笔记-1

1、Java线程状态

  • 新建
  • 可运行:可能正在运行,也可能正在等待 CPU 时间片
  • 等待(Waiting):等待其它线程显式地唤醒,否则不会被分配 CPU 时间片
  • 计时等待(Timed Waiting):无需等待其它线程显式地唤醒,在一定时间之后会被系统自动唤醒。
  • 阻塞
  • 死亡

操作系统的线程状态

  • 新建
  • 运行
  • 阻塞
  • 等待
  • 死亡

使用自旋锁时,线程请求资源失败并不会直接阻塞,而是空转一段时间,此时线程处于运行状态,只是什么也不会做。

2、线程创建方式

  • 继承Thread类
  • 实现Runnable接口
  • 实现Callable接口

之前有一个误会,CompletableFuture 也是创建线程的一种方式,但是实际不是,它是提供了异步编程,允许我们在不阻塞线程的同时,执行异步操作,并通过回调函数处理结果或异常。它依赖于 Executor 来提供线程执行异步任务。当使用 CompletableFuture 的方法如supplyAsync 或 runAsync 时,需要显式地提供一个 Executor,或者依赖 CompletableFuture 默认使用的 ForkJoinPool 来执行任务。

ExecutorService,接口,继承了Executor接口,里面提供了线程的提交,关闭,线程的状态判断等方法。

3、线程互斥和同步

Java提供两种线程锁机制来控制多个线程对共享资源的互斥访问
1、synchronized,可定义到类,方法,代码块上,依照里面锁的形式,分别可以锁住整个类或对象
2、ReentrantLock

使用选择

除非需要使用 ReentrantLock 的高级功能,否则优先使用 synchronized。这是因为 synchronized 是 JVM 实现的一种锁机制,JVM 原生地支持它,而 ReentrantLock 不是所有的 JDK 版本都支持。并且使用 synchronized 不用担心没有释放锁而导致死锁问题,因为 JVM 会确保锁的释放。

4、锁

参考:https://pdai.tech/md/java/thread/java-thread-x-overview.html

posted @   虚拟式  阅读(2)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示