windows 本地线程和java虚拟机线程区别
1.windows进程中,主线程执行完毕,则进程终止,所有子线程都将退出。2.而java虚拟机中,主线程退出了(main),如果还有子线程,则进程不会退出,子线程继续执行。 实例:c++ windows#include "stdafx.h"#include#includeusing namespace std;unsigned int _s
·
1.windows进程中,主线程执行完毕,则进程终止,所有子线程都将退出。
2.而java虚拟机中,主线程退出了(main),如果还有子线程,则进程不会退出,子线程继续执行。
实例:
c++ windows
#include "stdafx.h"
#include <process.h>
#include <iostream>
using namespace std;
unsigned int _stdcall Child(void *)
{
for (int i=0; i<1000; i++)
{
cout<<i<<endl;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
_beginthreadex(NULL, 0, Child, NULL, 0, NULL);
cout<<"main thread end"<<endl;
return 0;
}
输出结果不确定:输出n(n>=0 && n<=1000)个i的值,然后输出<<"main thread end“,然后进程退出
java 虚拟机:
Thread td = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub int i = 0; while(i<100) { i++; System.out.println(i+"child"); } } }); //td.setDaemon(true);//设置为守护线程 td.start();
输出结果为:一定能够输出100个i+child,和一个over,但输出顺序是不确定的。
如果将代码//td.setDaemon(true);放开,则表现和C++ windows下的本地线程一致了。
总结:虚拟机的一个java进程中,如果非守护线程数目为0,则进程结束,守护线程不再被执行。当然线程默认是非守护线程,否则进程还能起来么?
2014年3月4日16:51:22
更多推荐
已为社区贡献2条内容
所有评论(0)