Java中究竟哪种方法会导致线程长时间处于阻塞状态呢?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2615个文字,预计阅读时间需要11分钟。
一、为什么引入线程阻塞机制?为了解决对共享存储区的访问冲突,Java 引入了同步机制。现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够用了,因为可能在任意时刻都存在多个线程对共享资源的访问。
一、为什么引入线程阻塞机制?
为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个。为了解决这种情况下的访问控制问题,Java 引入了对阻塞机制的支持。
阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。Java 提供了大量方法来支持阻塞,下面让我们逐一分析。
二、Java中实现线程阻塞的方法:
(1)线程睡眠:Thread.sleep (long millis)方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。sleep()平台移植性好。
(2)线程等待:Object类中的wait()方法,导致当前的线程等待,直到其他线程调用此对象的 notify() 唤醒方法。这个两个唤醒方法也是Object类中的方法,行为等价于调用 wait() 一样。
本文共计2615个文字,预计阅读时间需要11分钟。
一、为什么引入线程阻塞机制?为了解决对共享存储区的访问冲突,Java 引入了同步机制。现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够用了,因为可能在任意时刻都存在多个线程对共享资源的访问。
一、为什么引入线程阻塞机制?
为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个。为了解决这种情况下的访问控制问题,Java 引入了对阻塞机制的支持。
阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。Java 提供了大量方法来支持阻塞,下面让我们逐一分析。
二、Java中实现线程阻塞的方法:
(1)线程睡眠:Thread.sleep (long millis)方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。sleep()平台移植性好。
(2)线程等待:Object类中的wait()方法,导致当前的线程等待,直到其他线程调用此对象的 notify() 唤醒方法。这个两个唤醒方法也是Object类中的方法,行为等价于调用 wait() 一样。

