导航:首页 > 安装方法 > 调用wait方法后线程会去哪里

调用wait方法后线程会去哪里

发布时间:2022-01-07 22:04:19

Ⅰ JAVA程序中有a,b两个线程,当a调用wait方法进入等待状态后,b用notify方法

这个是不确定,双线程都有可能执行到。如果短期类线程执行完毕,有很大可能只执行其中的某一个线程,你可以把线程执行时间调长点就能看到结果了(如在线程中加上for 循环,循环时间长点)

Ⅱ java线程wait方法

  1. wait和notify是用在多线程竞争同一锁资源的情况下使用的。

  2. 你这段代码实际是个单线程,这个线程自己把自己阻塞了,自然不可能自己把自己唤醒。

  3. 你的意图怎么实现呢?需要加入另外一个线程,下面是我仿照你的意图写的一段代码,供参考下



  4. publicclassA
    {
    publicA(){
    finalAa=this;
    Threadth1=newThread(){
    @Override
    publicvoidrun(){
    //一直循环,去尝试着唤醒a
    try
    {
    this.sleep(10000);
    }catch(InterruptedExceptione)
    {
    //TODOAuto-generatedcatchblock
    e.printStackTrace();
    }//为检查是不是能真正实现唤醒a,等待10000毫秒,此时保证a已经处于等待状态中。
    while(true){
    /**
    *用notify唤醒的线程必须是持有当前锁对象的线程
    */
    synchronized(a){
    a.notify();
    }
    }
    }
    };
    th1.setDaemon(true);//这句也是必须的,将th1设为守护线程,保证在唤醒a以后,所有活动的线程都为守护线程,jvm能及时推出
    th1.start();//和a.run的顺序不可以换
    this.run();
    }

    publicstaticvoidmain(String[]args)
    {
    newA();
    }

    publicvoidrun()
    {
    /**
    *这里可以换成这样,直接锁住this就行了
    */
    synchronized(this)
    {
    try
    {

    this.wait();//阻塞当前的线程
    }catch(InterruptedExceptione)
    {
    //TODOAuto-generatedcatchblock
    e.printStackTrace();
    }finally{
    System.out.println("1");//执行finally
    }
    }


    }

    }

Ⅲ java中怎样使用线程在调用一个函数后过几秒钟再调用另一个函数

应该有必要开启一个新的线程去监视isover线程是否结束,
一来 可以解决线程isover因为执行时间过长导致超时的问题
而来 也能通过监测isover线程的状态来实现线程结束再做其他处理的问题!
1、如果一个线程调用了某个对象的wait方法,那么该线程进入到该对象的等待池中(并且已经将锁释放),
如果未来的某一时刻,另外一个线程调用了相同对象的notify方法或者notifyAll方法,
那么该等待池中的线程就会被唤起,然后进入到对象的锁池里面去获得该对象的锁,
如果获得锁成功后,那么该线程就会沿着wait方法之后的路径继续执行。注意是沿着wait方法之后
2.如果没有直接性的调用同类里的其他接口,或者返回,结束等java关键字,代码还是得往下执行的。

Ⅳ 线程调用wait方法,再在别的线程调用notify方法的问题

java里面wait是使当前线程进入等待状态 并非是终止释放
当其他线程调用notify时 wait继续工作 当然这个也只是仅限制在同一监视器 呵呵!

但是这个具体要看你怎么写的 才能知道是不是从头执行 多线程时 可能 你这个wait等待时是10 别的线程执行一段时间以后 这个线程被notify时 可能从100开始执行 当然也可能不变 就是线程间互不通信

下次 最好能把你写的代码发上来 详细分析。

Ⅳ java执行了wait()方法,为什么还能够正常的运行run方法内的代码

你wait()挂起的是主线程,run()方法是在thread1线程内执行,两者不冲突。

Ⅵ 在Java中直接调用wait()方法时,请问是让哪个线程进入等待呢

main()所在的线程,这个线程包括一个Object对象,你需要在Object中启用notify()才可以重新唤醒

Ⅶ java 中1、一个线程调用了wait(),随后被notify()唤醒,这个线程会接着执行wait

1、如果一个线程调用了某个对象的wait方法,那么该线程进入到该对象的等待池中(并且已经将锁释放),
如果未来的某一时刻,另外一个线程调用了相同对象的notify方法或者notifyAll方法,
那么该等待池中的线程就会被唤起,然后进入到对象的锁池里面去获得该对象的锁,
如果获得锁成功后,那么该线程就会沿着wait方法之后的路径继续执行。注意是沿着wait方法之后
2.如果没有直接性的调用同类里的其他接口,或者返回,结束等java关键字,代码还是得往下执行的。

Ⅷ java多线程关于Thread实例对象执行wait方法的问题

wait()方法只是让当前线程(t1调用的,就是t1线程)在当前时间片不抢占cpu,但下一个时间片该抢还是抢
正常都是子线程执行完,主线程才继续执行,所以t1执行完,主线才会执行,而且是没有障碍地执行
最后你那个同步锁没什么用,因为没有线程跟主线程抢着执行同步块里的内容

Ⅸ 在synchronize代码块中调用wait后还会继续执行后续的代码吗

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


publicclassThreadA{
publicstaticvoidmain(String[]args){
ThreadBb=newThreadB();
b.start();//主线程中启动另外一个线程
System.out.println("bisstart....");
//括号里的b是什么意思,应该很好理解吧
synchronized(b){
try{
System.out.println("Waitingforbtocomplete...");
b.wait();//这一句是什么意思,究竟谁等待?
System.out.println("ThreadBisCompleted.Nowbacktomainthread");
}catch(InterruptedExceptione){}
}
System.out.println("Totalis:"+b.total);
}
}

classThreadBextendsThread{
inttotal;
publicvoidrun(){
synchronized(this){
System.out.println("ThreadBisrunning..");
for(inti=0;i<=100;i++){
total+=i;
}
System.out.println("totalis"+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()方法,请问是让哪个线程等待呢

主线程main()

阅读全文

与调用wait方法后线程会去哪里相关的资料

热点内容
水泥管与混凝土连接方法 浏览:627
室外空翻训练方法 浏览:885
如何自制山楂酱的制作方法 浏览:857
凉皮和面的方法与步骤 浏览:538
快速拖延任务的方法 浏览:566
稿酬怎么计算方法 浏览:533
u型管窗帘安装方法 浏览:660
治疗湿气重采取什么方法 浏览:538
遮阳防雨网安装方法 浏览:604
颈椎畸形自我治疗方法 浏览:356
快速点屏方法 浏览:680
铁丝使用方法视频 浏览:639
弱电解决方法大全 浏览:543
香草的种类及食用方法 浏览:634
忐忑不安可用什么方法理解 浏览:29
从相册中选择手机墙纸方法 浏览:590
如何区分氯化钠和碳酸钠五种方法 浏览:945
蔬菜亚硝酸盐的检测方法 浏览:741
全新哈弗h6全包围脚垫安装方法 浏览:566
轨道接头怎么安装方法 浏览:727