Java Object wait(long timeout, int nanos) 方法
AI 概述
语法参数返回值实例
Object wait(long timeout, int nanos) 方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数 timeout 与 nanos 设置的超时时间。
该方法与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以...
目录
Object wait(long timeout, int nanos) 方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数 timeout 与 nanos 设置的超时时间。
该方法与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。
如果 timeout 与 nanos 参数都为 0,则不会超时,会一直进行等待,类似于 wait() 方法。
当前线程必须是此对象的监视器所有者,否则还是会发生 IllegalMonitorStateException 异常。
如果当前线程在等待之前或在等待时被任何线程中断,则会抛出 InterruptedException 异常。
如果传递的参数不合法或 nanos 不在 0-999999 范围内,则会抛出 IllegalArgumentException 异常。
语法
public final void wait(long timeout, int nanos)
参数
- timeout – 等待时间(以毫秒为单位)。
- nanos – 额外等待时间(以纳秒为单位)。
返回值
没有返回值。
实例
以下实例演示了 wait(long timeout, int nanos) 方法的使用:
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class MybjTest extends Object {
private List synchedList;
public MybjTest() {
// 创建一个同步列表
synchedList = Collections.synchronizedList(new LinkedList());
}
// 删除列表中的元素
public String removeElement() throws InterruptedException {
synchronized (synchedList) {
// 列表为空就等待,等待 10 秒加上 500 纳秒
while (synchedList.isEmpty()) {
System.out.println("List is empty...");
synchedList.wait(10000, 500);
System.out.println("Waiting...");
}
String element = (String) synchedList.remove(0);
return element;
}
}
// 添加元素到列表
public void addElement(String element) {
System.out.println("Opening...");
synchronized (synchedList) {
// 添加一个元素,并通知元素已存在
synchedList.add(element);
System.out.println("New Element:'" + element + "'");
synchedList.notifyAll();
System.out.println("notifyAll called!");
}
System.out.println("Closing...");
}
public static void main(String[] args) {
final MybjTest demo = new MybjTest();
Mybjable runA = new Mybjable() {
public void run() {
try {
String item = demo.removeElement();
System.out.println("" + item);
} catch (InterruptedException ix) {
System.out.println("Interrupted Exception!");
} catch (Exception x) {
System.out.println("Exception thrown.");
}
}
};
Mybjable runB = new Mybjable() {
// 执行添加元素操作,并开始循环
public void run() {
demo.addElement("Hello!");
}
};
try {
Thread threadA1 = new Thread(runA, "Baidu");
threadA1.start();
Thread.sleep(500);
Thread threadA2 = new Thread(runA, "Mybj");
threadA2.start();
Thread.sleep(500);
Thread threadB = new Thread(runB, "Taobao");
threadB.start();
Thread.sleep(1000);
threadA1.interrupt();
threadA2.interrupt();
} catch (InterruptedException x) {
}
}
}
以上程序执行结果为:
List is empty... List is empty... Opening... New Element:'Hello!' notifyAll called! Closing... Waiting... Waiting... List is empty... Hello! Interrupted Exception!
以上关于Java Object wait(long timeout, int nanos) 方法的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Java Object wait(long timeout, int nanos) 方法
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Java Object wait(long timeout, int nanos) 方法
微信
支付宝