首页 cms教程 正文
thread.sleep(thread.sleep会阻塞调用线程吗)

 2023-11-09    bigbai  

thread.sleep(thread.sleep会阻塞调用线程吗)

1、线程从创建到销毁一般分为五种状态。当用关键字创建一个线程时,就是新建状态。调用了方法之后,线程就进入了就绪阶段。

2、此时,线程不会立即执行方法,需要等待获取资源。当线程获得时间片后,就会进入运行状态,开始执行方法。当遇到以下几种情况,线程会从运行状态进入到阻塞状态。

3、需要注意的是,阻塞状态只能进入就绪状态,不能直接进入运行状态。因为,从就绪状态到运行状态的切换是不受线程自己控制的,而是由线程调度器所决定。只有当线程获得了时间片之后,才会进入运行状态。当方法正常执行结束时,或者由于某种原因抛出异常都会使线程进入死亡状态。

4、另外,直接调用方法也会停止线程。但是,此方法已经被弃用,不推荐使用。当调用。

5、()睡眠方法时,就会使当前线程进入阻塞状态。参数指定了线程睡眠的时间,单位是毫秒。当时间结束之后,线程会重新进入就绪状态。

thread.sleep(thread.sleep会阻塞调用线程吗)

1、注意,如果当前线程获得了一把同步锁,则方法阻塞期间,是不会释放锁的。首先,它们都是类中的方法。需要配合关键字来使用。

2、调用线程的方法会使当前线程等待,直到其它线程调用此对象的/方法。如果,当前对象锁有个线程在等待,则方法会随机唤醒其中一个线程,而会唤醒对象锁中所有的线程。需要注意,唤醒时,不会立马释放锁,只有当前线程执行完之后,才会把锁释放。

3、另外,方法和方法不同之处,在于方法不会释放锁,而方法会释放锁。的使用如下:。以上,就是创建一个2线程,判断长度是否为5,不是的话,就一直阻塞。然后,另外一个1线程不停的向中添加元素,当元素长度为5的时候,就去唤醒阻塞中的2线程。

4、然而,我们会发现,此时的1线程会继续往下执行。直到方法执行完毕,才会把锁释放。1线程去唤醒2的时候,只是让2具有参与锁竞争的资格。

5、只有2真正获得了锁之后才会继续往下执行。当线程调用另外一个线程的方法时,当前线程就会进入阻塞状态。

  •  标签:  

原文链接:https://www.bigbai.cc/news/7513.html

本文版权:如无特别标注,本站文章均为原创。