导航:首页 > 编程语言 > 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相关的资料

热点内容
易语言源码转python 浏览:364
程序员日祝福 浏览:883
阿里tv助手app哪里下载 浏览:187
app活动怎么关 浏览:202
java改变map 浏览:348
解压钢琴吕恒 浏览:991
程序员怎么获取被动收入 浏览:568
能不能别让编程猫打电话给我了 浏览:687
量线突破指标源码 浏览:458
云服务器阿里环境搭建 浏览:123
锥孔是怎么编程的 浏览:133
加强箍和加密箍的区别 浏览:897
怎么在腾讯服务器上传文件 浏览:643
公司门户app安卓怎么卸载 浏览:990
单片机中段源 浏览:143
电脑桌面文件加密要怎样解除 浏览:963
quickfoxapp的商场在哪里 浏览:2
单片机与pc机通信毕业设计 浏览:221
wan口的服务器默认账号是什么 浏览:177
取小数位数php 浏览:716