「java线程的wait(」java线程的wait状态和block状态的区别
本篇文章给大家谈谈java线程的wait(,以及java线程的wait状态和block状态的区别对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、谁能帮我解释一下java线程中的wait()方法的作用与执行原理非常感谢!
- 2、java多线程 sleep和wait的区别
- 3、java线程wait方法
- 4、android java 线程 wait()函数
- 5、Java线程wait问题
- 6、java中wait方法是什么意思
谁能帮我解释一下java线程中的wait()方法的作用与执行原理非常感谢!
wait()方法是java.lang.Object类韦线程提供的用于实现线程间通信的同步控制方法。wait()方法使当前线程主动释放互斥锁,并进入该互斥锁的等待队列。(也就是说,它使当前线程暂停执行,等待其他线程执行notify()方法或者notifyall()方法后再继续执行本线程。)本方法用于释放一个项目的线程,唤醒另一个可能在等待的线程。有两种调用格式:
1.wait()等待通信线程唤醒后再继续执行本线程。
2.wait(long millis)等待通信线程唤醒或者最多等待millis毫秒后,再继续执行本线程。
我知道的就这么多了哈,希望对你能有一点帮助哦~~
java多线程 sleep和wait的区别
sleep()和wait()方法的最大区别是:
sleep()睡眠时,保持对象锁,仍然占有该锁;
而wait()睡眠时,释放对象锁。
但是wait()和sleep()都可以通过interrupt()方法打断线程的暂停状态,从而使线程立刻抛出InterruptedException(但不建议使用该方法)。
java线程wait方法
wait和notify是用在多线程竞争同一锁资源的情况下使用的。
你这段代码实际是个单线程,这个线程自己把自己阻塞了,自然不可能自己把自己唤醒。
你的意图怎么实现呢?需要加入另外一个线程,下面是我仿照你的意图写的一段代码,供参考下
public class A
{
public A(){
final A a = this;
Thread th1 = new Thread(){
@Override
public void run(){
//一直循环,去尝试着唤醒a
try
{
this.sleep(10000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}//为检查是不是能真正实现唤醒a,等待10000毫秒,此时保证a已经处于等待状态中。
while(true){
/**
* 用notify唤醒的线程必须是持有当前锁对象的线程
*/
synchronized (a){
a.notify();
}
}
}
};
th1.setDaemon(true);//这句也是必须的,将th1设为守护线程,保证在唤醒a以后,所有活动的线程都为守护线程,jvm能及时推出
th1.start();//和a.run的顺序不可以换
this.run();
}
public static void main(String[] args)
{
new A();
}
public void run()
{
/**
* 这里可以换成这样,直接锁住this就行了
*/
synchronized (this)
{
try
{
this.wait();//阻塞当前的线程
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
System.out.println("1");//执行finally
}
}
}
}
android java 线程 wait()函数
简单说wait必须显示用代码唤醒。
wait是Object的方法,也就是说可以对任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者,例如:
//Thread 1
try{
obj.wait();//suspend thread until obj.notify() is called
}
catch(InterrputedException e) {
}
Java线程wait问题
java的每一个实例对象都有一个等待队列和一个对象锁,任何一个线程要想调用该对象的wait()方法进入该对象的等待队列,就必须先通过synchronized()方法获得当前对象的锁,先说你的第一个问题,两个线程通过synchronized()方法获得的是str对象的锁,但是你在调用wait()方法的时候,默认情况下调用的是this对象的wait()函数,但是当前线程并没有获得this对象的锁,当然会报错,如果我没猜错,改成this.str.wait()和this.str.notifyAll()应该就会好了。第二个问题,也是这样,你确实获得了 锁,但是注意,你获得的是str对象的锁,不是this对象的锁,所以在你调用notifyAll()方法的时候,会出现一个异常,因为你调用的是this对象的notifyAll()方法,而this对象的等待 队列压根就是空的,因为没有任何一个线程获得它的对象锁,所以才会报错,当然了,你把synchronized()方法的参数改成this,肯定不会报错了。
java中wait方法是什么意思
wait方法用在 synchronized 方法或者 synchronized块中。
一般在判断语句中,如果某条件被触发,让当前线程wait并释放对象的锁。
此时可以让其他线程可以对用以对象调用synchronized方法。
直到调用 notify或者notifyAll后 wait的线程才有可能执行。
所以一般wait 和 notify是成对出现的。
有点复杂,去看看线程同步有关的东西吧。
java线程的wait(的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java线程的wait状态和block状态的区别、java线程的wait(的信息别忘了在本站进行查找喔。