守护线程的作用
守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护线程是一种很有用的进程。
Linux的大多数服务器就是用守护线程实现的。比如,Internet服务器inetd,Web服务器httpd等。
同时,守护线程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
守护线程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同Unix环境下守护线程的编程规则并不一致。
守护线程最重要的特性是后台运行。
在这一点上DOS下的常驻内存程序TSR与之相似。
其次,守护线程必须与其运行前的环境隔离开来。
这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。
这些环境通常是守护线程从执行它的父进程(特别是shell)中继承下来的。
最后,守护线程的启动方式有其特殊之处。
它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。
守护线程以及其作用
通常来说,守护线程经常被用来执行一些后台任务,但是呢,你又希望在程序退出时,或者说 JVM 退出时,线程能够自动关闭,此时,守护线程是你的首选。
“只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器),他就是一个很称职的守护者。”
为用户线程提供便利服务的线程就是守护线程,比如JVM中的垃圾回收器就是一种守护线程。
守护线程不止是有JVM自行创建的线程,程序员也可以通过setDaemon(true)的方式,将用户线程转化为守护线程。当然,既然守护线程的唯一作用是为用户线程提供便利服务,所以当程序中仅存在守护线程时,守护线程就没有存在的必要了,JVM会关闭剩下的守护线程并且推出该进程。
怎么让java多线程所有线程休眠
1. 可以通过调用Thread类的sleep方法来让Java多线程中的所有线程休眠。
2. sleep方法是Thread类的静态方法,可以通过指定休眠时间(以毫秒为单位)来让线程暂停执行。
休眠时间过后,线程会自动恢复执行。
3. 如果希望所有线程同时休眠,可以在每个线程的run方法中调用sleep方法,并设置相同的休眠时间。
这样所有线程都会在指定的时间内暂停执行,实现线程的同步休眠。
除了sleep方法,Java多线程还可以使用wait和join方法来实现线程的休眠和同步。
wait方法可以让线程等待其他线程的通知,而join方法可以让一个线程等待另一个线程执行完毕后再继续执行。
通过合理使用这些方法,可以实现多线程的控制和同步。
如何确保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();
}
}