线程的基本概念、基本状态——多线程技术一

多线程技术在实际开发中运用的比较多,但是也是比较难的一部分,如果能够熟练掌握,那你的薪资肯定是高的不行。

基本概念:线程就像一条要执行的线索,单线程就像只有一个在做事,多线程就像很多人在做事(很多人同时用一个资源)。一个程序中可以有多条执行线索同时执行,一个线程就是程序中的一条执行线索,每个线程上都关联要执行的代码,即可以有多端程序代码同时执行。每个程序至少都有一个线程,一个程序的main方法就是一个线程。

基本状态:就绪,运行,synchronize阻塞,wait和sleep挂起,结束。wait必须在synchronized内部使用。

线程各个状态关系如图(线程的生命周期):



sleep()与wait()的区别:

sleep是Thread类的方法,wait是Object类中定义的方法. 

sleep():只是睡眠,参数可以设置,单位毫秒,可以设置什么时候自动启动,sleep()只是暂停,把执行机会给其他线程,但是监控状态依然保持,到时会自动回复。调用sleep不是释放对象锁。

wait():对此对象调用wait方法导致本线性放弃对象锁,进入等待此对象的等待锁定池中,只有针对此对象发出notify方法(或notifyAll)后本线性才进入对象锁定池准备获得对象锁进入运行状态。



### Java 多线程基本概念 #### 什么是多线程? 在Java中,多线程是指个程序能够同时执行多个任务。每个任务被称为线程线程是进程中可独立调度的最小单位,在同时间内可以并行处理多项工作[^1]。 #### 创建线程的方法 有两种主要方式用于创建新的线程: - **继承`Thread`类** 这种方法涉及定义个新的类来扩展`java.lang.Thread`,重写其`run()`方法以包含要在线程内执行的操作逻辑。之后实例化该自定义线程对象并通过调用它的`start()`启动它。 - **实现`Runnable`接口** 更推荐的做法是从现有类外部提供实现了`Runnable`接口的对象给标准的`Thread`构造函数。这样做不仅绕过了单继承带来的限制,还允许更方便地共享资源或状态信息[^2]。 ```java // 使用Runnable接口的例子 public class MyTask implements Runnable { @Override public void run() { System.out.println("My task is running."); } public static void main(String[] args) { Thread thread = new Thread(new MyTask()); thread.start(); } } ``` 对于更加复杂的场景,还可以考虑使用`Callable<V>`接口配合`Future<T>`机制获取返回结果以及支持异常传播等功能。 #### 线程状态转换 线程在其生命周期中有几种不同的状态:新建(New),就绪(Runnable),运行(Running),阻塞(Blocked),等待(Waiting),计时等待(Timed Waiting),终止(Terminated)[^3]。这些状态反映了线程当前所处的位置及其活动状况。 #### 同步与锁机制 由于多个线程可能访问相同的内存区域,因此同步成为必要措施之,用来防止竞争条件的发生。可以通过`synchronized`关键字或者显式的锁定原语如ReentrantLock来进行控制。 #### 守护线程 vs 用户线程 Java中的线程分为两种类型——用户线程和守护线程。前者通常代表应用程序的主要业务流程;后者则负责辅助性质的工作比如垃圾回收(GC)等服务型功能。旦所有的非守护(即用户)线程结束,则整个虚拟机将会关闭,即使还有存活的守护线程也不会继续存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小明爱吃火锅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值