導航:首頁 > 編程語言 > java結束main

java結束main

發布時間:2022-06-07 22:10:31

『壹』 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方法執行結束,程序也就執行結束了!

閱讀全文

與java結束main相關的資料

熱點內容
什麼是由解析器域名和伺服器構成 瀏覽:414
自動識別電影信息源碼 瀏覽:849
柱筋箍筋加密區怎麼算 瀏覽:48
鋼筋中加密15倍是什麼意思 瀏覽:366
esc加密演算法 瀏覽:518
linux運行exe命令 瀏覽:124
一級建造師管理pdf 瀏覽:720
如何更改伺服器登錄賬號 瀏覽:317
看pdf文件軟體 瀏覽:183
android恢復模式 瀏覽:808
生命令人憂 瀏覽:597
魔獸搬磚怎麼選擇伺服器 瀏覽:771
程序員求伯君圖片 瀏覽:827
安卓手機如何打開mark2文件 瀏覽:662
紅米手機解壓中文解壓密碼 瀏覽:316
安卓智謀三國志是什麼平台 瀏覽:948
伺服器系統linux怎麼下載 瀏覽:946
程序員面試寶典6 瀏覽:558
oppo伺服器地址多少 瀏覽:221
加密貨幣發行國家 瀏覽:493