Daemon线程和用户线程
在构造函数TryThread中带参数true调用sekDaeman()使线程构造一个daemon线程一个daemon线程是一个简单的背景线程隶属于创建它的线程因此当创建daemon线程的线程结束deameti线程也与它一起结束在我们这种情况中main()方法创建daemon线程所以当main()返回时所有由main()创建的线程将结束如果你运行这个例子随便回车几次你会看到main()方法返回后daemon线程结束因为有时在main()中最后一个输出后你将从一个或另一个线程中取得输出
不是daemon线程的线程称作一个用户线程(user thread)下图显示两个daemon线程和一个由程序的主线程创建的用户线程
一个用户线程有它自己的生命周期不依赖创建它的线程当创建它的线程结束后
终止一个线程
在最后一个例子中如果我们没将线程创建成daemon线程它们将独立于main()继续执行如果你准备自己终止这个程序(在运行Java的DOS会话巾用Ctrl+C你可以通过将构造函数中setDaemon()方法的调用作为注释验证这一点键入回车会结束main()但其他线程将继续独立运行
一个线程可以通过对Thread对象调用interrupt()方法通知另一个线程它应该停止执行实际上不需要停止这个线程它只是在这个线程中设置一个在run()方法中检查所需的标志达到某种效果此时sleep()方法检查线程是否被中断如果是被中断会抛出一个InterruptedException异常通过对前边例子做一点修改你可以看到它的运转
[] [] [] [] [] [] [] []