JAVA多线程基础

1.创建线程的方法

继承Thread类:简单,但Java单继承,扩展性差。

实现Runnable接口:任务与线程分离,可复用。

实现Callable接口:可返回结果

2.线程的六种状态

NEW:新建,未调用start()

RUNNABLE:可运行(包括就绪和运行中)

BLOCKED:阻塞,等待监视器锁(synchronized)

WAITING:等待,无限期等待(object.wait()/thread.join())

TIMED_WAITING:超时等待(sleep(ms)/wait(ms))

TERMINATED:终止

3.线程安全

比如说一个线程完成一个任务后,再去做另一个任务,可能会把前者的信息带到这个任务中,这样会造成线程不安全

eg:第一个用户登陆后,线程复用,第二个用户登录,可能导致第二个用户看到第一个用户的信息,这就是线程不安全

4.锁:

可以保证线程安全,比如说一个线程在做事的时候,给他锁上,把所有东西做完才释放。

也可以说,把这个线程锁上只服务一个任务,一定能保证线程安全

5.可重入锁与不可重入锁

可重入:A线程把线程id给到object类(加锁),做一半做其他事了,但是加上的id标识还在,然后再回来还能进去,继续操作这个类,那么这就是可重入锁

相关推荐
专注仿真3 分钟前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放15 分钟前
Python基础语法练习题(75)
开发语言·python·学习
starzy19901 小时前
Scala循环与判断:一切皆表达式的控制流
开发语言·人工智能·scala
wangbing11251 小时前
平台介绍-modbus设备调试
java
starzy19901 小时前
Scala类和对象:从构造器到样例类的完整指南
开发语言·后端·scala
niucloud-admin1 小时前
NIUCLOUD PHP SAAS上门家政使用文档--服务订单:订单列表
开发语言·php
西索斯coding2 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
怪我冷i2 小时前
Rust 的impl语法详解
开发语言·后端·rust
wuminyu2 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
qq_406981032 小时前
c++的decltype是什么
开发语言·c++