java前台线程和后台线程

一.  java中的后台线程:

      java线程大家都不陌生,可以用继承Thread类或者实现Runable接口来定义一个自己的线程。另外,java线程还可以分为前台线程(也称用户线程或普通线程)和后台线程(Daemon thread),本篇就是要说明这两者的区别和用法。

     1.  后台线程会随着主线程(main线程)的结束而结束,但是前台进程则不会(如果main线程先于前台进程结束,前台进程仍然会执行);或者说,只要有一个前台线程未退出,进程就不会终止。(下面的例子会充分说明这一点);

     2.  默认情况下,程序员创建的线程是用户线程;用setDaemon(true)可以设置线程为后台线程;而用isDaemon( )则可以判断一个线程是前台线程还是后台线程;

     3. jvm的垃圾回收器其实就是一个后台线程;

     4. setDaemon函数必须在start函数之前设定,否则会抛出IllegalThreadStateException异常;

package org.lxh.demo08.b;

public class RunnableTest implements Runnable
{
	private String name;
	private long delay;
	public static void main(String args[]) 
	{
		RunnableTest r = new RunnableTest("thread1",200);
		Thread t = new Thread(r);
		t.setDaemon(true);  //后台线程
		t.start();
		try 
		{
			System.in.read();
		}catch(Exception e)	{}
		System.out.println("end main");
		
	}
	public RunnableTest(String name,long delay) 
	{
		this.name = name;
		this.delay = delay;
	}
	public void run()
	{
		try
		{
			while(true)
			{
				System.out.println(name);
				Thread.sleep(delay);
			}
		}catch(Exception e)
		{
			System.out.println("Exception");
		}
	}
}

测试结果:

case 1:     t.setDaemon(truer);   //后台线程

 thread1

thread1

thread1
......

thread1
end main

case 2:     t.setDaemon(false);   //前台线程,相当于不调用setDaemon 

 thread1

thread1

thread1

......

thread1
end main

thread1

thread1

thread1

......

*/

三.  说明:

 1.   在测试过程中,对于上面的case1中的执行,当用户按下回车键,打印完end main,随之整个程序结束,任务管理器中的进程列表中的java.exe(也就是本程序的进程)结束。

2.  对于case2的代码, 当用户按下回车键,打印完end main, 继续打印thread1, 查看任务管理器的进程列表,java.exe(也就是本程序的进程)并没有退出,直到强行结束它,进程才退出,代码也停止打印thread1。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值