学习dubbo框架的问题
- InputStream : 是所有字節(jié)輸入流的超類,一般使用它的子類:FileInputStream等,它能輸出字節(jié)流;
- InputStreamReader : 是字節(jié)流與字符流之間的橋梁,能將字節(jié)流輸出為字符流,并且能為字節(jié)流指定字符集,可輸出一個(gè)個(gè)的字符;
Properties的load方法其實(shí)就是傳進(jìn)去一個(gè)輸入流,字節(jié)流或者字符
流,字節(jié)流利用InputStreamReader轉(zhuǎn)化為字符流,然后字符流用
BufferedReader包裝,BufferedReader讀取properties配置文件,每
次讀取一行,分割成兩個(gè)字符串。因?yàn)镻roperties是Map的子類,
然后用put將兩個(gè)字符串裝進(jìn)Properties對(duì)象。
?
Class<T>在實(shí)例化的時(shí)候,T要替換成具體類
Class<?>它是個(gè)通配泛型,?可以代表任何類型
?
method invoke 方法
java.lang.reflect.Method public Object invoke(Object obj, Object... args) 參數(shù): obj:從中調(diào)用底層方法的對(duì)象,必須是實(shí)例化對(duì)象 args: 用于方法調(diào)用,是一個(gè)object的數(shù)組,因?yàn)閰?shù)有可能有多個(gè) 返回: 使用參數(shù)args在obj上指派該對(duì)象所表示的方法的結(jié)果。 invoke方法中的obj就是一個(gè)實(shí)例化對(duì)象,可以直接返回對(duì)象的中每個(gè)屬性的值。 加上后面的agrs結(jié)果是一樣的。 就是調(diào)用類中的方法,最簡(jiǎn)單的用法是可以把方法參數(shù)化invoke(class, method)
比如你Test類里有一系列名字相似的方法setValue1、setValue2等等
可以把方法名存進(jìn)數(shù)組v[],然后循環(huán)里invoke(test,v[i]),就順序調(diào)用了全部setValue
?
synchronized詳解 ?
Java語言的關(guān)鍵字,當(dāng)它用來修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候,能夠保證在同一時(shí)刻最多只有一個(gè)線程執(zhí)行該段代碼。
?
???? 一、當(dāng)兩個(gè)并發(fā)線程訪問同一個(gè)對(duì)象object中的這個(gè)synchronized(this)同步代碼塊時(shí),一個(gè)時(shí)間內(nèi)只能有一個(gè)線程得到執(zhí)行。另一個(gè)線程必須等待當(dāng)前線程執(zhí)行完這個(gè)代碼塊以后才能執(zhí)行該代碼塊。
?
???? 二、然而,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),另一個(gè)線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。
?
???? 三、尤其關(guān)鍵的是,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),其他線程對(duì)object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。
?
???? 四、第三個(gè)例子同樣適用其它同步代碼塊。也就是說,當(dāng)一個(gè)線程訪問object的一個(gè)synchronized(this)同步代碼塊時(shí),它就獲得了這個(gè)object的對(duì)象鎖。結(jié)果,其它線程對(duì)該object對(duì)象所有同步代碼部分的訪問都被暫時(shí)阻塞。
?
???? 五、以上規(guī)則對(duì)其它對(duì)象鎖同樣適用.
?
HashMap和Hashtable的區(qū)別
HashMap和Hashtable都實(shí)現(xiàn)了Map接口,但決定用哪一個(gè)之前先要弄清楚它們之間的分別。主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。
- HashMap幾乎可以等價(jià)于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受為null的鍵值(key)和值(value),而Hashtable則不行)。
- HashMap是非synchronized,而Hashtable是synchronized,這意味著Hashtable是線程安全的,多個(gè)線程可以共享一個(gè)Hashtable;而如果沒有正確的同步的話,多個(gè)線程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴(kuò)展性更好。
- 另一個(gè)區(qū)別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當(dāng)有其它線程改變了HashMap的結(jié)構(gòu)(增加或者移除元素),將會(huì)拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會(huì)拋出ConcurrentModificationException異常。但這并不是一個(gè)一定發(fā)生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區(qū)別。
- 由于Hashtable是線程安全的也是synchronized,所以在單線程環(huán)境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那么使用HashMap性能要好過Hashtable。
- HashMap不能保證隨著時(shí)間的推移Map中的元素次序是不變的。
?
?
[java] view plaincopy print?- package?com.xiaozhi.helloio;??
- ??
- import?java.io.FileInputStream;??
- import?java.io.IOException;??
- import?java.util.Properties;??
- ??
- public?class?Test7?{??
- ??
- ????public?static?void?main(String[]?args)?throws?IOException?{??
- ????????Properties?properties=new?Properties();??
- ????????properties.load(new?FileInputStream("c:\\xiaozhi.properties"));??
- ????????System.out.println(properties.getProperty("lisi"));??
- ????????System.out.println(properties.getProperty("zhangsan"));??
- ????}??
- }?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/zlj1992/p/7234662.html
總結(jié)
以上是生活随笔為你收集整理的学习dubbo框架的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注册一个商贸公司多少钱
- 下一篇: 分页传页数的方法