最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Object.wait()與Object.notify()的用法詳細(xì)解析

 更新時(shí)間:2013年09月06日 17:44:33   作者:  
以下是對(duì)java中Object.wait()與Object.notify()的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下

wait、notify和notifyAll方法是Object類的final native方法。所以這些方法不能被子類重寫(xiě),Object類是所有類的超類,因此在程序中有以下三種形式調(diào)用wait等方法。

復(fù)制代碼 代碼如下:

wait();//方式1:
this.wait();//方式2:
super.wait();//方式3

void notifyAll()
解除所有那些在該對(duì)象上調(diào)用wait方法的線程的阻塞狀態(tài)。該方法只能在同步方法或同步塊內(nèi)部調(diào)用。如果當(dāng)前線程不是鎖的持有者,該方法拋出一個(gè)IllegalMonitorStateException異常。

void notify()
隨機(jī)選擇一個(gè)在該對(duì)象上調(diào)用wait方法的線程,解除其阻塞狀態(tài)。該方法只能在同步方法或同步塊內(nèi)部調(diào)用。如果當(dāng)前線程不是鎖的持有者,該方法拋出一個(gè)IllegalMonitorStateException異常。

void wait()
導(dǎo)致線程進(jìn)入等待狀態(tài),直到它被其他線程通過(guò)notify()或者notifyAll喚醒。該方法只能在同步方法中調(diào)用。如果當(dāng)前線程不是鎖的持有者,該方法拋出一個(gè)IllegalMonitorStateException異常。

void wait(long millis)和void wait(long millis,int nanos)
導(dǎo)致線程進(jìn)入等待狀態(tài)直到它被通知或者經(jīng)過(guò)指定的時(shí)間。這些方法只能在同步方法中調(diào)用。如果當(dāng)前線程不是鎖的持有者,該方法拋出一個(gè)IllegalMonitorStateException異常。

Object.wait()和Object.notify()和Object.notifyall()必須寫(xiě)在synchronized方法內(nèi)部或者synchronized塊內(nèi)部,這是因?yàn)椋哼@幾個(gè)方法要求當(dāng)前正在運(yùn)行object.wait()方法的線程擁有object的對(duì)象鎖。即使你確實(shí)知道當(dāng)前上下文線程確實(shí)擁有了對(duì)象鎖,也不能將object.wait()這樣的語(yǔ)句寫(xiě)在當(dāng)前上下文中。如:

復(fù)制代碼 代碼如下:

package edu.sjtu.erplab.ObjectTest;

class A
{
    public synchronized void printThreadInfo() throws InterruptedException
    {
        Thread t=Thread.currentThread();
        System.out.println("ThreadID:"+t.getId()+", ThreadName:"+t.getName());
    }
}

 

public class ObjectWaitTest {
    public static void main(String args[])
    {
        A a=new A();
        //因?yàn)閜rintThreadInfo()方法拋出InterruptedException異常,所以這里必須使用try-catch塊
        try {
            a.printThreadInfo();
            a.wait();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}


程序運(yùn)行會(huì)報(bào)錯(cuò),運(yùn)行結(jié)果如下:
ThreadID:1, ThreadName:main
Exception in thread "main" java.lang.IllegalMonitorStateException
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at edu.sjtu.erplab.ObjectTest.ObjectWaitTest.main(ObjectWaitTest.java:24)

正確的寫(xiě)法應(yīng)該是
復(fù)制代碼 代碼如下:

package edu.sjtu.erplab.ObjectTest;

class A
{
    public synchronized void printThreadInfo() throws InterruptedException
    {
        Thread t=Thread.currentThread();
        System.out.println("ThreadID:"+t.getId()+", ThreadName:"+t.getName());
//        this.wait();//一直等待
        this.wait(1000);//等待1000ms
//        super.wait(1000);
    }
}

 

public class ObjectWaitTest {
    public static void main(String args[])
    {
        A a=new A();
        //因?yàn)閜rintThreadInfo()方法拋出InterruptedException異常,所以這里必須使用try-catch塊
        try {
            a.printThreadInfo();
            //a.wait();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Thread t=Thread.currentThread();
        System.out.println("ThreadID:"+t.getId()+", ThreadName:"+t.getName());
    }
}

相關(guān)文章

  • mybatis generator 使用方法教程(生成帶注釋的實(shí)體類)

    mybatis generator 使用方法教程(生成帶注釋的實(shí)體類)

    下面小編就為大家?guī)?lái)一篇mybatis generator 使用方法教程(生成帶注釋的實(shí)體類)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Springboot自帶定時(shí)任務(wù)實(shí)現(xiàn)動(dòng)態(tài)配置Cron參數(shù)方式

    Springboot自帶定時(shí)任務(wù)實(shí)現(xiàn)動(dòng)態(tài)配置Cron參數(shù)方式

    這篇文章主要介紹了Springboot自帶定時(shí)任務(wù)實(shí)現(xiàn)動(dòng)態(tài)配置Cron參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • FeignClient如何共享Header及踩坑過(guò)程記錄

    FeignClient如何共享Header及踩坑過(guò)程記錄

    這篇文章主要介紹了FeignClient如何共享Header及踩坑過(guò)程記錄,
    2022-03-03
  • Springboot上傳文件時(shí)提示405問(wèn)題及排坑過(guò)程

    Springboot上傳文件時(shí)提示405問(wèn)題及排坑過(guò)程

    這篇文章主要介紹了Springboot上傳文件時(shí)提示405問(wèn)題及排坑過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 詳解Java中的鎖Lock和synchronized

    詳解Java中的鎖Lock和synchronized

    鎖是Java并發(fā)編程中最重要的同步機(jī)制,Java提供了種類豐富的鎖,每種鎖因其特性的不同,在適當(dāng)?shù)膱?chǎng)景下能夠展現(xiàn)出非常高的效率。本文將詳細(xì)介紹Lock和synchronized
    2021-06-06
  • 一文帶你了解RabbitMQ消息轉(zhuǎn)換器

    一文帶你了解RabbitMQ消息轉(zhuǎn)換器

    這篇文章主要為大家詳細(xì)介紹了RabbitMQ中消息轉(zhuǎn)換器的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-04-04
  • Java不定參數(shù)使用及一些注意情況

    Java不定參數(shù)使用及一些注意情況

    不定參數(shù)是一種特殊的參數(shù)類型,它允許方法接受可變數(shù)量的參數(shù),本文主要介紹了Java不定參數(shù)使用及一些注意情況,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • SpringBoot實(shí)現(xiàn)接口防刷的五種方案

    SpringBoot實(shí)現(xiàn)接口防刷的五種方案

    接口防刷是保障系統(tǒng)安全與穩(wěn)定性的重要措施,惡意的高頻請(qǐng)求不僅會(huì)消耗服務(wù)器資源,還可能導(dǎo)致數(shù)據(jù)異常,甚至系統(tǒng)癱瘓,本文將介紹在SpringBoot框架下實(shí)現(xiàn)接口防刷的5種技術(shù)方案,需要的朋友可以參考下
    2025-04-04
  • SpringCloud配置刷新原理解析

    SpringCloud配置刷新原理解析

    這篇文章主要介紹了SpringCloud之配置刷新的原理,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • 基于Java的MathML轉(zhuǎn)圖片的方法(示例代碼)

    基于Java的MathML轉(zhuǎn)圖片的方法(示例代碼)

    最近接到一個(gè)新需求mathML轉(zhuǎn)圖片怎么實(shí)現(xiàn)呢?剛開(kāi)始還真是蒙圈了,不知道怎么實(shí)現(xiàn),今天小編記錄一種基于Java的MathML轉(zhuǎn)圖片的方法,感興趣的朋友一起看看吧
    2021-06-06

最新評(píng)論

鸡泽县| 星子县| 忻城县| 广昌县| 丰县| 漠河县| 奉化市| 甘南县| 瓦房店市| 土默特右旗| 黄山市| 扶绥县| 清水河县| 泰州市| 山东省| 新疆| 玛纳斯县| 桑植县| 沾益县| 凤山市| 唐海县| 清水河县| 平阴县| 安义县| 梅州市| 临汾市| 绥德县| 罗源县| 沧州市| 晴隆县| 南召县| 防城港市| 花垣县| 南安市| 保靖县| 邻水| 漳浦县| 伽师县| 汝城县| 日土县| 庆安县|