欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

java 线程 wait 一定要同步_Java 线程中调用wait为什么一定要在同步代码块中?

发布时间:2025/3/21 java 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java 线程 wait 一定要同步_Java 线程中调用wait为什么一定要在同步代码块中? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

展开全部

wait是让使用wait方法的对象等待,暂时先把对象锁给让出来,给其它持有该锁的对象用,其它对象用完后再636f707962616964757a686964616f31333337396235告知(notify)等待的那个对象可以继续执行了,因此,只有在synchronized块中才有意义(否则,如果大家并不遵循同步机制,那还等谁呢?根本没人排队,也就谈不上等待和唤醒了)

以下是一个例子,用以展示这种机制:public class ThreadA {

public static void main(String[] args) {

ThreadB b = new ThreadB();

b.start();//主线程中启动另外一个线程

System.out.println("b is start....");

//括号里的b是什么意思,应该很好理解吧

synchronized(b) {

try {

System.out.println("Waiting for b to complete...");

b.wait();//这一句是什么意思,究竟谁等待?

System.out.println("ThreadB is Completed. Now back to main thread");

}catch (InterruptedException e){}

}

System.out.println("Total is :" + b.total);

}

}

class ThreadB extends Thread {

int total;

public void run() {

synchronized(this) {

System.out.println("ThreadB is running..");

for (int i=0; i<=100; i++ ) {

total += i;

}

System.out.println("total is " + total);

notify();

}

}

}

运行结果:

b is start....

Waiting for b to complete...

ThreadB is running..

total is 5050

ThreadB is Completed. Now back to main thread

Total is :5050

总结

以上是生活随笔为你收集整理的java 线程 wait 一定要同步_Java 线程中调用wait为什么一定要在同步代码块中?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。