① java線程池怎麼判斷任務執行完再執行主線程
先調用
shutdown
在調用
isTerminated
例:
/*
* 採用線程池開啟多個子線程,主線程等待所有的子線程執行完畢
*/
public static void moreThread() {
try {
int threadNum = 0;
for (int i = 0; i < 10; i++) {
threadNum++;
final int currentThreadNum = threadNum;
exe.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println("子線程[" + currentThreadNum + "]開啟");
Thread.sleep(1000*10);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("子線程[" + currentThreadNum + "]結束");
}
}
});
}
System.out.println("已經開啟所有的子線程");
exe.shutdown();
System.out.println("shutdown():啟動一次順序關閉,執行以前提交的任務,但不接受新任務。");
while(true){
if(exe.isTerminated()){
System.out.println("所有的子線程都結束了!");
break;
}
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("主線程結束");
}
}
② 在java裡面什麼是線程,什麼是主線程主線程和子線程的關系
首先,java里的線程沒有主和子的說法,只有線程優先順序的說法,也許你說的是進程和線程吧,下面是詳細資料
線程是指進程內的一個執行單元,也是進程內的可調度實體.與進程的區別:
(1)地址空間:進程內的一個執行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有自己獨立的地址空間;
(2)資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源
(3)線程是處理器調度的基本單位,但進程不是.
(4)二者均可並發執行.
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小於進程,使得多線程程序的並發性高。
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行.
③ java判斷線程是否存活有幾種方法
void shutdown()
啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則調用沒有其專他作用。
拋出屬:
SecurityException - 如果安全管理器存在並且關閉,此 ExecutorService 可能操作某些不允許調用者修改的線程(因為它沒有保持RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒絕訪問。
isTerminated
boolean isTerminated()
如果關閉後所有任務都已完成,則返回 true。注意,除非首先調用 shutdown 或 shutdownNow,否則 isTerminated 永不為 true。
返回:
如果關閉後所有任務都已完成,則返回 true
④ java中Thread.sleep 這個Thread到底是主線程還是子線程啊
sleep是static方法,使調用線程進入睡眠
r1.sleep的用法嚴格講是錯的
用thread.sleep
⑤ 如何判斷java線程是否在運行
判斷是否在運行用isAlive方法哈。。
給你寫了個例子。。不知是不是你想要的。。
public class Thread100 {
/**
* @param args
*/
public static ThreadA ta = new ThreadA();
public static ThreadB tb = new ThreadB();
public static void main(String[] args) {
ta.start();
tb.start();
}
}
class ThreadA extends Thread {
@Override
public void run() {
int i = 0;
while(i < 100) {
if(Thread100.tb.isAlive()) {
System.out.println("B is alive");
}
System.out.println(i);
i++;
}
}
}
class ThreadB extends Thread {
@Override
public void run() {
int i = 0;
while(i < 100) {
if(Thread100.ta.isAlive()) {
System.out.println("A is alive");
}
System.out.println(i);
i++;
}
}
}
⑥ Android 判斷當前線程是否是主線程的方法
在java-mian線程中Thread.currentThread().getName() == "main";
你可以做個android程序在主線程里獲取當前線程名Thread.currentThread().getName();以專後在其他線程里就獲取當前線程名與屬之比較Thread.currentThread().getName().equals("main");
⑦ 判斷當前線程是不是主線程
在java-mian線程中Thread.currentThread().getName() == "main";
你可以做個android程序在主線程里獲取當前線程名Thread.currentThread().getName();以後在其他線程里就內獲取當前線程名與之比較容Thread.currentThread().getName().equals("main");
⑧ java 中怎麼判斷某一線程是否運行
可以調用 Thread.isAlive() 判斷, 當然也可以設置一個標記, 在那個線程專結束之前設置標屬記。
/**
* Tests if this thread is alive. A thread is alive if it has
* been started and has not yet died.
* @return <code>true</code> if this thread is alive;
* <code>false</code> otherwise.
*/
Thread.isAlive()
⑨ Java判斷線程是否是停止狀態的兩種方法
只要能拿到Thread對象就可以查看啊
Thread t = new Thread ();System.out.println(t.getState());
⑩ java 主線程判斷子線程是不是都完成
可以使用countdownlatch這個工具,來在主線程await, 如果還自有未完成的子線程, 就一直等待, 當所有完成時可以繼續進行。
參考:http://www.iteye.com/topic/1002652