2.保存现场(寄存器,页面等等),部分内存交换出去,不访问,被动开启,好象中断一样.

2.不保存现场信息,内存不变,等待-访问,等待开启(有可能是某个信号量),此时的线程处于Sleep状态(起码Windows是这样的)
守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护线程是一种很有用的进程。
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会关闭剩下的守护线程并且推出该进程。
线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池。
线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池。
每个对象都有自己的一个锁池的空间,用于放置等待运行的线程。
这些线程中哪个线程拿到锁标记由系统决定。
锁标记如果过多,就会出现线程等待其他线程释放锁标记,而又都不释放自己的锁标记供其他线程运行的状况。就是死锁。
死锁的问题通过线程间的通信的方式进行解决。
线程间通信机制实际上也就是协调机制。
线程间通信使用的空间称之为对象的等待队列,则个队列也是属于对象的空间的。
Object类中又一个wait(),在运行状态中,线程调用wait(),此时表示着线程将释放自己所有的锁标记,同时进入这个对象的等待队列。
等待队列的状态也是阻塞状态,只不过线程释放自己的锁标记。
如果一个线程调用对象的notify(),就是通知对象等待队列的一个线程出列。进入锁池。如果使用notifyall()则通知等待队列中所有的线程出列。
注意:只能对加锁的资源进行wait()和notify()。