『壹』 java main方法結束後,其佔用的內存是什麼狀態
main方法結束後,進程就結束了,操作系統會把進程的內存來回收。
『貳』 java中可不可以說執行完main方法,java源程序執行完畢了
對
因為main即是起點 也將是終點
除非中間有死循環
因為計算機指令的執行是採用中斷機制的
中斷後 執行優先順序更高的指令
但執行完高優先順序指令後最終還是要返回中斷點
『叄』 Java中為用return結束了main方法;但是finally還是會執行入口都關閉了,為什麼
Java中finally代碼是肯定會被執行的,即使拋出異常或者return。看下面代碼:
publicstaticvoidmain(String[]args){
try{
System.out.println("Try");
return;
}finally{
System.out.println("Finally");
}
}
如果查看這段代碼的匯編代碼:
Code:
0:getstatic#2//Fieldjava/lang/System.out:Ljava/io/PrintStream;
3:ldc#3//StringTry
5:invokevirtual#4//Methodjava/io/PrintStream.println:(Ljava/lang/String;)V
8:getstatic#2//Fieldjava/lang/System.out:Ljava/io/PrintStream;
11:ldc#5//StringFinally
13:invokevirtual#4//Methodjava/io/PrintStream.println:(Ljava/lang/String;)V
16:return
17:astore_1
18:getstatic#2//Fieldjava/lang/System.out:Ljava/io/PrintStream;
21:ldc#5//StringFinally
23:invokevirtual#4//Methodjava/io/PrintStream.println:(Ljava/lang/String;)V
26:aload_1
27:athrow
可以看到編譯器編譯時已經把finally中的代碼(8,11,13)提前到了return之前(16)執行。return之後還會看到finally中的匯編,不過不會執行了。我的理解是編譯的時候把return之後的語句拷貝到return之前的位置,但是沒有刪除return之後的語句。
『肆』 java是不是從main方法開始到main方法結束
是這樣的,但是如果啟動了其它線程的話,有可能main方法結束後,程序並沒有結束,而是在繼續執行其他線程。
『伍』 Java中的main線程是不是最後一個退出的線程
要實現這個情況,必須知道以下幾點
1、java中線程的結束是由run方法運行完成後自動結束的
2、在main線程(主線程)中,需要得到所有線程的引用。
3、知道jdk提供的CountDownLatch的用法
例子如下:
public static void main(String[] args) throws InterruptedException
{
//CountDownLatch作為計數器紀錄有幾個線程,例如有2個線程
CountDownLatch latch=new CountDownLatch(2);
Worker worker1=new Worker( latch);
Worker worker2=new Worker(latch);
worker1.start();// 啟動線程
worker2.start();//
//等待所有工人完成工作
latch.await();
System.out.println("all work done at "+sdf.format(new Date()));
}
class Worker extends Thread
{
private CountDownLatch latch;
public Worker(CountDownLatch latch)
{
this.latch = latch;
}
public void run()
{
xxxxx
//在run方法結束之前,講線程計數器減一
latch.countDown();
}
}
『陸』 java main結束後還會執行其他代碼嗎 為什麼求高手指點,要有文字說明,詳細一些。
下面的程序輸出結果為
0
2
1
當在輸出2的時候,main已經結束了。但是程序依然執行,輸出了1.
是因為main函數只是程序的入口,是一個程序中多條線程的其中一條。獨立的線程間是互相不影響的,因此即便main線程結束了,其他線程依然會照常運行。
class test extends Thread{
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(1);
super.run();
}
}
public class Test{
public static void main(String[] args) {
//new Server();
System.out.println(0);
new test().start();
System.out.println(2);
}
}
『柒』 如何確保main方法所在的線程是java程序最後結束的線程如何確保
首先先了解如果在main方法中啟動多線程,在其他線程均未執行完成之前,main方法線程會不會提前退出呢?答案是肯定的:
1、JVM會在所有的非守護線程(用戶線程)執行完畢後退出;
2、main線程是用戶線程;
3、僅有main線程一個用戶線程執行完畢,不能決定JVM是否退出,也即是說main線程並不一定是最後一個退出的線程。
所以如果需要確保main方法所在的線程是JVM中最後結束的線程,這里就需要用到Thread類的join()方法:
在一個線程中啟動另外一個線程的join方法,當前線程將會掛起,而執行被啟動的線程,知道被啟動的線程執行完畢後,當前線程才開始執行。
具體實現可參看代碼:
classThread1extendsThread
{
publicThread1(StringthreadName)
{
super(threadName);
}
publicvoidrun()
{
System.out.println(getName()+"isrunning");
try
{
sleep(2000);
}
catch(InterruptedExceptione)
{
e.printStackTrace();
}
}
}
classThread2extendsThread
{
privateThread1thread1;
publicThread2(StringthreadName,Thread1thread1)
{
super(threadName);
this.thread1=thread1;
}
publicvoidrun()
{
System.out.println(getName()+"isrunning");
try
{
thread1.start();
thread1.join();
}
catch(InterruptedExceptione)
{
e.printStackTrace();
}
System.out.println("thread2isover");
}
}
publicclassJoinTest
{
publicstaticvoidmain(String[]args)
{
Thread1thread1=newThread1("Thread1");
Thread2thread2=newThread2("Thread2",thread1);
thread2.start();
}
}
在thead2中調用thread1的join()方法,讓thread1中斷thread2自身的運行,運行程序首先輸出thread2isrunning,然後輸出thread1isrunning,過了兩秒鍾之後,才輸出thread2isover,這就說明在thread2中調用thread1的join()方法,thread2自身被中斷了,轉而執行thread1,等待thread1執行完畢之後,再轉過來執行thread2。
『捌』 如何確保main()方法所在的線程是Java程序最後結束的線程
要實現這個情況,必須知道以下幾點
1、java中線程的結束是由run方法運行完成後自動結束的
2、在main線程(主線程)中,需要得到所有線程的引用。
3、知道jdk提供的CountDownLatch的用法
例子如下:
public static void main(String[] args) throws InterruptedException
{
//CountDownLatch作為計數器紀錄有幾個線程,例如有2個線程
CountDownLatch latch=new CountDownLatch(2);
Worker worker1=new Worker( latch);
Worker worker2=new Worker(latch);
worker1.start();// 啟動線程
worker2.start();//
//等待所有工人完成工作
latch.await();
System.out.println("all work done at "+sdf.format(new Date()));
}
class Worker extends Thread
{
private CountDownLatch latch;
public Worker(CountDownLatch latch)
{
this.latch = latch;
}
public void run()
{
xxxxx
//在run方法結束之前,講線程計數器減一
latch.countDown();
}
}
『玖』 java.多線程情況下,我的main方法運行結束了,到run方法的代碼還沒執行結束,會中止嗎
main本質上也是屬於一個線程,當所有線程都執行完成了JVM才會退出,所以針對你的問題,答案是:
如果main方法運行結束了,但是run沒有執行結束,那麼main會終止,但是run不會終止。
『拾』 JAVA中main方法是什麼意思
main方法是一個特殊的方法,是程序執行的入口,一個Java程序從main方法開始執行。
Java虛擬機在執行Java程序之前會事先分配一個主線程,然後在主線程裡面執行我們這個main方法,明白了吧?所以我們經常說main方法叫主線程!
線程就是一個程序裡面不同的執行路徑!算了,這些不理解也無所謂,總之,你就記住,Java程序從main方法開始執行,
比如:
public
static
void
main(String[]
args)
{
System.out.println("nihao");
}
在你這里當程序運行的時候,從main方法進來,然後做的第一件事就是System.out.println("nihao");
然後沒有其他語句了,main方法執行結束,程序也就執行結束了!