成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Object中的公共方法及作用有哪些

本篇內(nèi)容主要講解“Object中的公共方法及作用有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Object中的公共方法及作用有哪些”吧!

為武強(qiáng)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及武強(qiáng)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、武強(qiáng)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

直接看一下,Object類的源碼:

package java.lang;

public class Object {

private static native void registerNatives();

static {

registerNatives();

}

public final native Class<?> getClass();

public native int hashCode();

public boolean equals(Object obj) {

return (this == obj);

}

protected native Object clone() throws CloneNotSupportedException;

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

public final native void notify();

public final native void notifyAll();

public final native void wait(long timeout) throws InterruptedException;

public final void wait(long timeout, int nanos) throws InterruptedException {

if (timeout < 0) {

throw new IllegalArgumentException("timeout value is negative");

}

if (nanos < 0 || nanos > 999999) {

throw new IllegalArgumentException(

"nanosecond timeout value out of range");

}

if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {

timeout++;

}

wait(timeout);

}

public final void wait() throws InterruptedException {

wait(0);

}

protected void finalize() throws Throwable { }

}

其實(shí)看JDK文檔大家都能知道這些方法的含義,不過(guò)我把自己對(duì)它們的理解介紹一下,這里面public的方法,重點(diǎn)我會(huì)詳細(xì)介紹較難掌握的wait和notify方法。

具體方法的說(shuō)明如下:

public String toString()

這個(gè)默認(rèn)是打印對(duì)象的getClass().getName() + '@' + Integer.toHexString(hashCode())

類名@哈希碼,可子類可重寫該方法定義自己的對(duì)象字符串,最常用。

public final native Class<?> getClass();

獲取對(duì)象的類名,在反射中可以用到。

public int hashCode();

public boolean equals(Object obj)

這兩個(gè)方法在集合框架的Set集合類中用途非常重要,因?yàn)镾et集合中的元素不允許重復(fù),各種自定義對(duì)象如何判斷是否重復(fù),就是通過(guò)重寫這兩個(gè)方法來(lái)完成的。

public final native void notify();

public final native void notifyAll();

public final void wait()

public final native void wait(long timeout)

public final void wait(long timeout, int nanos)

這里幾組方法有多個(gè)重載方法,不過(guò)核心的方法就是wait方法和notify方法,這兩個(gè)方法,如果沒(méi)有學(xué)習(xí)過(guò)java多線程編程估計(jì)不會(huì)接觸到,這涉及到線程的同步以及在同步條件下線程通信的問(wèn)題。

java 線程同步機(jī)制就是保證多個(gè)線程訪問(wèn)同一個(gè)共享對(duì)象時(shí)不發(fā)生沖突的步驟是上鎖、操作、釋放鎖。而這個(gè)鎖是在java對(duì)象中隱含的鎖,鎖也叫"同步監(jiān)視器" ,它是所有對(duì)象都擁有的,你不用可視而不見(jiàn),

其實(shí)就定義在Object類中,不過(guò)我們不用了解它的存在,為了防止同一個(gè)共享對(duì)象不發(fā)生沖突,java用 synchronized 來(lái)保護(hù)共享對(duì)象不處于競(jìng)爭(zhēng)狀態(tài).,可采用同步方法或同步塊來(lái)完成,但是當(dāng)同步環(huán)境下兩個(gè)線程需要通信怎么辦?如果沒(méi)有通信機(jī)制,兩個(gè)線程只能針對(duì)鎖的獲取發(fā)出輪詢效率很低,這里Object類的wait和notify兩個(gè)方法就可以解決這個(gè)問(wèn)題。

采用 wait()/notify() 實(shí)現(xiàn)同步條件下線程間通信的原理如下:

使用前提:必須是同步條件,否則調(diào)用會(huì)異常.

調(diào)用wait()

調(diào)用線程會(huì)放棄CPU

調(diào)用線程釋放鎖

調(diào)用線程進(jìn)入鎖的等待集合(池),等待CPU重新調(diào)度。

調(diào)用notify()

某個(gè)線程從鎖的等待集合中離開(kāi)進(jìn)入準(zhǔn)備運(yùn)行狀態(tài)

被通知的線程必須重新請(qǐng)求鎖才能執(zhí)行.

notify()不能精確指定被通知的線程.

notifyAll() 通知所有在等待集合的線程離開(kāi)進(jìn)入準(zhǔn)備運(yùn)行狀態(tài)

下面以經(jīng)典的生產(chǎn)者和消費(fèi)者問(wèn)題來(lái)了解生產(chǎn)者線程Producer和消費(fèi)者線程Consumer,同步一個(gè)同享對(duì)象Shop,利用wait和notify方法來(lái)通信的代碼:

Puducer.java 生產(chǎn)者線程定義

public class Producer implements Runnable{

Shop shop;

public Producer(Shop shop) {

// TODO Auto-generated constructor stub

this.shop=shop;

new Thread(this,"生產(chǎn)者線程").start();

}

@Override

public void run() {

// TODO Auto-generated method stub

int i=0;

while(true){

shop.put(i++);

}

}

}

Consumer.java 消費(fèi)者線程定義

public class Consumer implements Runnable{

Shop shop;

public Consumer(Shop shop) {

// TODO Auto-generated constructor stub

this.shop=shop;

new Thread(this,"消費(fèi)者線程").start();

}

@Override

public void run() {

// TODO Auto-generated method stub

while(true){

shop.get();

}

}

}

共享對(duì)象Shop.java定義

public class Shop {

int no;

boolean hasData=false; //false表示無(wú)數(shù)據(jù) true有數(shù)據(jù)

synchronized int get(){ //消費(fèi)產(chǎn)品

if(hasData==false){

try {

wait();//消費(fèi)者線程暫停

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println("消費(fèi):"+no);

hasData=false;//消費(fèi)完了.通知生產(chǎn)

notify();

return no;

}

synchronized void put(int no){ //放產(chǎn)品

if(hasData==true){

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println("生產(chǎn):"+no);

hasData=true;

this.no=no;

notify();

}

}

測(cè)試類PC.java

public class PC {

public static void main(String[] args) {

Shop shop=new Shop();

new Producer(shop);

new Consumer(shop);

}

}

到此,相信大家對(duì)“Object中的公共方法及作用有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站標(biāo)題:Object中的公共方法及作用有哪些
鏈接分享:http://jinyejixie.com/article20/pgspco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、自適應(yīng)網(wǎng)站、定制開(kāi)發(fā)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
扬州市| 尚志市| 牟定县| 巧家县| 永康市| 昔阳县| 剑川县| 威信县| 广德县| 阳城县| 茌平县| 娱乐| 静宁县| 宁强县| 凤山县| 公主岭市| 梁河县| 山东| 芜湖县| 凤庆县| 神池县| 太湖县| 保康县| 芒康县| 盐池县| 历史| 黄大仙区| 揭西县| 乐业县| 三台县| 马尔康县| 尚志市| 扶风县| 石嘴山市| 黄大仙区| 宝坻区| 开鲁县| 镇安县| 永顺县| 牙克石市| 石泉县|