A. java中list的使用方法
LIST是個容器介面,可以理解為動態數組,傳統數組必須定義好數組的個數才可以使用,而容器對象無須定義好數組下標總數,用add()方法即可添加新的成員對象,他可以添加的僅僅只能為對象,不能添加基本數據類型,容器還對應get(),remove()方法來獲取和刪除數據成員
B. java 裡面,主線程的優先順序可以設置嗎
Thread類的setPriority(int level)方法設置線程的優先順序。優先順序別從1到10,1是最不重要的,10是最重要的。不設置優先順序將是默認值5.
C. 如何解決java 多線程問題
Java線程同步需要我們不斷的進行相關知識的學習,下面我們就來看看如何才能更好的在學習中掌握相關的知識訊息,來完善我們自身的編寫手段。希望大家有所收獲。 Java線程同步的優先順序代表該線程的重要程度,當有多個線程同時處於可執行狀態並等待獲得 CPU 時間時,線程調度系統根據各個線程的優先順序來決定給誰分配 CPU 時間,優先順序高的線程有更大的機會獲得 CPU 時間,優先順序低的線程也不是沒有機會,只是機會要小一些罷了。 你可以調用 Thread 類的方法 getPriority()和 setPriority()來存取Java線程同步的優先順序,線程的優先順序界於1(MIN_PRIORITY)和10(MAX_PRIORITY)之間,預設是5(NORM_PRIORITY)。 Java線程同步 由於同一進程的多個線程共享同一片存儲空間,在帶來方便的同時,也帶來了訪問沖突這個嚴重的問題。Java語言提供了專門機制以解決這種沖突,有效避免了同一個數據對象被多個線程同時訪問。 由於我們可以通過 private 關鍵字來保證數據對象只能被方法訪問,所以我們只需針對方法提出一套機制,這套機制就是 synchronized 關鍵字,它包括兩種用法:synchronized 方法和 synchronized 塊。 1. synchronized 方法:通過在方法聲明中加入 synchronized關鍵字來聲明 synchronized 方法。如:1. public synchronized void accessVal(int newVal); synchronized 方法控制對類成員變數的訪問:每個類實例對應一把鎖,每個 synchronized 方法都必須獲得調用該方法的類實例的鎖方能執行,否則所屬線程阻塞,方法一旦執行,就獨占該鎖,直到從該方法返回時才將鎖釋放,此後被阻塞的Java線程同步方能獲得該鎖,重新進入可執行狀態。 這種機制確保了同一時刻對於每一個類實例,其所有聲明為 synchronized 的成員函數中至多隻有一個處於可執行狀態(因為至多隻有一個能夠獲得該類實例對應的鎖),從而有效避免了類成員變數的訪問沖突(只要所有可能訪問類成員變數的方法均被聲明為 synchronized)。 在 Java 中,不光是類實例,每一個類也對應一把鎖,這樣我們也可將類的靜態成員函數聲明為 synchronized ,以控制其對類的靜態成員變數的訪問。 synchronized 方法的缺陷:若將一個大的方法聲明為synchronized 將會大大影響效率,典型地,若將線程類的方法 run()聲明為 synchronized ,由於在線程的整個生命期內它一直在運行,因此將導致它對本類任何 synchronized 方法的調用都永遠不會成功。當然我們可以通過將訪問類成員變數的代碼放到專門的方法中,將其聲明為 synchronized ,並在主方法中調用來解決這一問題,但是 Java 為我們提供了更好的解決辦法,那就是 synchronized 塊。 2. synchronized 塊:通過 synchronized關鍵字來聲明synchronized 塊。語法如下:1. synchronized(syncObject)2. {3. //允許訪問控制的代碼4. } synchronized 塊是這樣一個代碼塊,其中的代碼必須獲得對象 syncObject (如前所述,可以是類實例或類)的鎖方能執行,具體機制同前所述。由於可以針對任意代碼塊,且可任意指定上鎖的對象,故靈活性較高。 Java線程同步的阻塞 為了解決對共享存儲區的訪問沖突,Java 引入了同步機制,現在讓我們來考察多個Java線程同步對共享資源的訪問,顯然同步機制已經不夠了,因為在任意時刻所要求的資源不一定已經准備好了被訪問,反過來,同一時刻准備好了的資源也可能不止一個。為了解決這種情況下的訪問控制問題,Java 引入了對阻塞機制的支持。 阻塞指的是暫停一個Java線程同步的執行以等待某個條件發生(如某資源就緒),學過操作系統的同學對它一定已經很熟悉了。Java 提供了大量方法來支持阻塞,下面讓我們逐一分析。
D. java中有幾種方法可以實現一個線程用什麼關鍵字修飾同步方法 stop()和suspend()方
在Java中,多線程的實現有兩種方式:
擴展java.lang.Thread類
實現java.lang.Runnable介面
synchronized 修飾同步方法
方法摘要
static Thread currentThread()
返回對當前正在執行的線程對象的引用。
ClassLoader getContextClassLoader()
返回該線程的上下文 ClassLoader。
long getId()
返回該線程的標識符。
String getName()
返回該線程的名稱。
int getPriority()
返回線程的優先順序。
Thread.State getState()
返回該線程的狀態。
ThreadGroup getThreadGroup()
返回該線程所屬的線程組。
static boolean holdsLock(Object obj)
當且僅當當前線程在指定的對象上保持監視器鎖時,才返回 true。
void interrupt()
中斷線程。
static boolean interrupted()
測試當前線程是否已經中斷。
boolean isAlive()
測試線程是否處於活動狀態。
boolean isDaemon()
測試該線程是否為守護線程。
boolean isInterrupted()
測試線程是否已經中斷。
void join()
等待該線程終止。
void join(long millis)
等待該線程終止的時間最長為 millis 毫秒。
void join(long millis, int nanos)
等待該線程終止的時間最長為 millis 毫秒 + nanos 納秒。
void resume()
已過時。 該方法只與 suspend() 一起使用,但 suspend() 已經遭到反對,因為它具有死鎖傾向。有關更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。
void run()
如果該線程是使用獨立的 Runnable 運行對象構造的,則調用該 Runnable 對象的 run 方法;否則,該方法不執行任何操作並返回。
void setContextClassLoader(ClassLoader cl)
設置該線程的上下文 ClassLoader。
void setDaemon(boolean on)
將該線程標記為守護線程或用戶線程。
static void (Thread.UncaughtExceptionHandler eh)
設置當線程由於未捕獲到異常而突然終止,並且沒有為該線程定義其他處理程序時所調用的默認處理程序。
void setName(String name)
改變線程名稱,使之與參數 name 相同。
void setPriority(int newPriority)
更改線程的優先順序。
void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設置該線程由於未捕獲到異常而突然終止時調用的處理程序。
static void sleep(long millis)
在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。
static void sleep(long millis, int nanos)
在指定的毫秒數加指定的納秒數內讓當前正在執行的線程休眠(暫停執行)。
void start()
使該線程開始執行;Java 虛擬機調用該線程的 run 方法。
void stop()
已過時。 該方法具有固有的不安全性。用 Thread.stop 來終止線程將釋放它已經鎖定的所有監視器(作為沿堆棧向上傳播的未檢查 ThreadDeath 異常的一個自然後果)。如果以前受這些監視器保護的任何對象都處於一種不一致的狀態,則損壞的對象將對其他線程可見,這有可能導致任意的行為。stop 的許多使用都應由只修改某些變數以指示目標線程應該停止運行的代碼來取代。目標線程應定期檢查該變數,並且如果該變數指示它要停止運行,則從其運行方法依次返回。如果目標線程等待很長時間(例如基於一個條件變數),則應使用 interrupt 方法來中斷該等待。有關更多信息,請參閱《為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?》。
void stop(Throwable obj)
已過時。 該方法具有固有的不安全性。請參閱 stop() 以獲得詳細信息。該方法的附加危險是它可用於生成目標線程未准備處理的異常(包括若沒有該方法該線程不太可能拋出的已檢查的異常)。有關更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。
void suspend()
已過時。 該方法已經遭到反對,因為它具有固有的死鎖傾向。如果目標線程掛起時在保護關鍵系統資源的監視器上保持有鎖,則在目標線程重新開始以前任何線程都不能訪問該資源。如果重新開始目標線程的線程想在調用 resume 之前鎖定該監視器,則會發生死鎖。這類死鎖通常會證明自己是「凍結」的進程。有關更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。
String toString()
返回該線程的字元串表示形式,包括線程名稱、優先順序和線程組。
static void yield()
暫停當前正在執行的線程對象,並執行其他線程。
E. java 中使用線程的方法到底有哪些
繼承Thread,或都實現Runnable介面
調用的時候,內方法容如:
MyClass myObj=new MyClass();
Thread thread=new Thread(myObj);
thread.start();
F. java 程序 關於主線程
實際上你在主線程中調用了koo.add(5, 6);
盡管在koo.add(5, 6);之前調用了t.start();這並不意味著t線程馬上就能得到執行。
t.start();只是告訴調度器,t線程處於了runnable狀態,並不是一定馬上就得到執行,什麼時候可獲取CPU的佔用權而得到執行,t線程是控制不了的。
G. 在java中,返回線程的優先順序的方法是什麼
創建一個繼承Thread的簡單類:
public class SetPriorityDemo extends Thread {
@Override
public void run() {
for(int i=0;i<100;i++)
{
System.out.println(getName()+"--"+i);
}
}
}
2
在主線程中創建兩個線程,並對其進行優先順序的設置:
ublic class SetPriorityMain {
public static void main(String[] args) {
SetPriorityDemo spd = new SetPriorityDemo();
SetPriorityDemo spd2 = new SetPriorityDemo();
spd.getPriority();// 5 ,
spd.setName("hahah");
spd2.setName("hehhe");
spd.setPriority(10);//10
spd2.setPriority(1);//1
spd.start();
spd2.start();
}
}
3
這句語句在控制台中得到的結果是:5; 這就說明了線程默認的優先順序是5;
4
spd.setPriority(10);//10
spd2.setPriority(1);//1
10是最大的優先順序,最優先,而1是最小的優先順序,所以最慢!
5
控制台運行結果如下:
hahah--0
hehhe--0
hahah--1
hehhe--1
hahah--2
hehhe--2
hahah--3
hehhe--3
hahah--4
hahah--5
hehhe--4
hahah--6
hahah--7
hahah--8
hahah--9
hahah--10
hahah--11
hahah--12
hahah--13
hehhe--5
hehhe--6
hahah--14
hahah--15
.