1. java中怎麼把一個線程裡面的變數傳到另一個線程
把這個變數定義提取到線程外部, 線程通過引用持有這個變數, 這樣就可以實現變數的共享, 這個時候就要注意線程同步的問題.
2. java 變數和多線程問題
1、ArrayList和Vector的區別
這兩個類都實現了List介面(List介面繼承了Collection介面),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,相當於一種動態的數組,我們以後可以按位置索引號取出某個元素,,並且其中的數據是允許重復的,這是HashSet之類的集合的最大不同處,HashSet之類的集合不可以按索引號去檢索其中的元素,也不允許有重復的元素(本來題目問的與hashset沒有任何關系,但為了說清楚ArrayList與Vector的功能,我們使用對比方式,更有利於說明問題)。
接著才說ArrayList與Vector的區別,這主要包括兩個方面:
(1)同步性:
Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不同步的。如果只有一個線程會訪問到集合,那最好是使用ArrayList,因為它不考慮線程安全,效率會高些;如果有多個線程會訪問到集合,那最好是使用Vector,因為不需要我們自己再去考慮和編寫線程安全的代碼。
備註:對於Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問題,記住Vector與Hashtable是舊的,是java一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時才提供的,它們是線程不安全的。所以,我們講課時先講老的。
(2)數據增長:
ArrayList與Vector都有一個初始的容量大小,當存儲進它們裡面的元素的個數超過了容量時,就需要增加ArrayList與Vector的存儲空間,每次要增加存儲空間時,不是只增加一個存儲單元,而是增加多個存儲單元,每次增加的存儲單元的個數在內存空間利用與程序效率之間要取得一定的平衡。Vector默認增長為原來兩倍,而ArrayList的增長策略在文檔中沒有明確規定(從源代碼看到的是增長為原來的1.5倍)。ArrayList與Vector都可以設置初始的空間大小,Vector還可以設置增長的空間大小,而ArrayList沒有提供設置增長空間的方法。
總結:即Vector增長原來的一倍,ArrayList增加原來的0.5倍。
2、HashMap和Hashtable的區別
HashMap 是Hashtable 的輕量級實現(非線程安全的實現),他們都完成了Map 介面,主要
區別在於HashMap 允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。
HashMap 允許將null 作為一個entry 的key 或者value,而Hashtable 不允許。
HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey。因為contains
方法容易讓人引起誤解。
Hashtable 繼承自Dictionary 類,而HashMap 是Java1.2 引進的Map interface 的一個實現。
最大的不同是,Hashtable 的方法是Synchronize 的,而HashMap 不是,在多個線程訪問
Hashtable 時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable 和HashMap 採用的hash/rehash 演算法都大概一樣,所以性能不會有很大的差異。
3、char型變數中能不能存貯一個中文漢字?為什麼?
char型變數是用來存儲Unicode編碼的字元的,unicode編碼字元集中包含了漢字,所以,char型變數中當然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字元集中,那麼,這個char型變數中就不能存儲這個特殊漢字。補充說明:unicode編碼佔用兩個位元組,所以,char類型的變數也是佔用兩個位元組。
char型變數是用來存儲Unicode編碼的字元的,unicode編碼字元集中包含了漢字,所以,char型變數中當然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字元集中,那麼,這個char型變數中就不能存儲這個特殊漢字。補充說明:unicode編碼佔用兩個位元組,所以,char類型的變數也是佔用兩個位元組。
4、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
多線程有兩種實現方法。一種是繼承Thread類,一種是實現Runnable介面!
同步有兩種方法。一種同步方法,一種同步代碼,分別是synchronized,wait與notify
3. java線程存放在jvm的哪個區域方法又存放在哪個區呢
聊到JAVA中的方法,大多數人對於方法存儲在方法區還是棧區(虛擬機棧)是很迷茫的。其實方法是存在方法區的下面我們就細細說一下JVM中的 方法區 VS 棧區方法區:用於存儲已被虛擬機載入的類信息、常量、靜態變數、即時編譯器編譯後的代碼等數據,方法編譯出的位元組碼也是保存在這
4. JAVA線程本地變數ThreadLocal和私有變數的區別
ThreadLocal變數 作用域是各自線程內部。私有變數作用域 屬於該類的實例。
所以, ThreadLocal變數專 只用於線程內部共享,是線程安全的屬。
私有變數線程不安全,例如,利用一個Runnable實例啟動2個線程,這2個線程就可以共同擁有 私有變數。