wait简单使⽤
线程中的简单通信可以通过wait和notify来实现,它们都是object的⽅法
wait() - ⽅法wait()的作⽤是使当前执⾏代码的线程进⾏等待,它是Object类的⽅法,该⽅法⽤来将当前线程置⼊预执⾏队列中,并且在wait所在的代码⾏处停⽌执⾏,直到接
到通知或被中断为⽌。
感恩节英语祝福语
在调⽤wait⽅法之前,线程必须获得该对象的对象级别锁,即只能在同步⽅法或同步块中调⽤wait⽅法。
notify() - 同wait⽅法⼀样,也需要在同步⽅法或同步块中调⽤,即在调⽤前,线程也必须获得该对象的对象级别锁。
wait和notify调⽤时,如果没有⽤被锁的对象调⽤,将会抛出IllegalMonitorStateException的异常。它是⼀个RuntimeException的⼦类。
public class studyWait {礼物英文
public static void main(String[] args) {
Object lock = new Object();
Object wlock = new Object();
WaitThread w1 = new WaitThread(lock,"s线程1");
w1.start();
高考题/* Object wlock2 = new Object();
WaitThread w2 = new WaitThread(lock,"s线程2");
w2.start();*/
NotifyThread t2 = new NotifyThread(lock,"n线程1");
module是什么意思
t2.start();
theta
}
}
despair是什么意思
class NotifyThread extends Thread {
private final Object lock;
private String name;
public NotifyThread(Object lock,String name) {
super();
loving you原唱
this.lock = lock;
跟我走英文this.name = name;
}
@Override
public void run() {
synchronized (lock) {
/
/ 业务逻辑完成了...
System.out.println(name+"开始 notify time= " + System.currentTimeMillis());
// 做⼀些业务逻辑相关的事。。。。
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(name+"结束 notify time= " + System.currentTimeMillis());
}
}
lufe}
class WaitThread extends Thread {
private final Object lock;
private String name;
public WaitThread(Object lock,String name) {
super();
this.lock = lock;
this.name = name;
}
@Override
public void run() {
try {
synchronized (lock) {
long start = System.currentTimeMillis();
System.out.println(name+"开始 wait time= " + start);
Thread.sleep(3000);
System.out.println(name+"wait 休眠 3000ms");
lock.wait();
long end = System.currentTimeMillis();
System.out.println(name+"结束 wait time= " + end);
System.out.print(name+"wait time = " + (end - start));
}
logistics} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运⾏结果:
D:\Java\jdk1.8.0_131\bin\java "-javaagent:E:\JetBrains\IntelliJ IDEA 2017.3.1\lib\idea_rt.jar=61765:E:\JetBrains\IntelliJ IDEA 2017.3.1\bin" -ding=UTF-8 -classpath D:\Java\jdk1.8.0_131\jre\lib\charts.jar;D:\Java\jdk1.8.0_131\jre\lib\de s线程1开始 wait time= 1605673739807
s线程1wait 休眠 3000ms
n线程1开始 notify time= 1605673742807
n线程1结束 notify time= 1605673745808
s线程1结束 wait time= 1605673745808
s线程1wait time = 6001
Process finished with exit code 0