线程停止与守护进程--072

来源:互联网 发布:淘宝形象模特 编辑:程序博客网 时间:2024/05/01 16:47
package cn.itcast.thread;/* 线程的停止: 1. 停止一个线程 我们一般都会通过一个变量去控制的。 2. 如果需要停止一个处于等待状态下的线程,那么我们需要通过变量配合notify方法或者interrupt()来使用。 */public class Demo6 extends Thread {boolean flag = true;public Demo6(String name){super(name);}@Overridepublic synchronized void run() {int i = 0 ;while(flag){try {this.wait(); //狗娃等待..} catch (InterruptedException e) {System.out.println("接收到了异常了....");}System.out.println(Thread.currentThread().getName()+":"+i);i++;}}public static void main(String[] args) {Demo6 d = new Demo6("狗娃");d.setPriority(10);d.start();for(int i = 0 ; i<100 ; i++){System.out.println(Thread.currentThread().getName()+":"+i);//当主线程的i是80的时候停止狗娃线程。//d.interrupt();  // interrupt()根本就是无法停止一个线程。if(i==80){d.flag = false;d.interrupt(); //把线程的等待状态强制清除,被清除状态的线程会接收到一个InterruptedException。 /*synchronized (d) {d.notify();}*/}}}}
package cn.itcast.thread;/* 守护线程(后台线程):在一个进程中如果只剩下 了守护线程,那么守护线程也会死亡,主线程结束,则守护线程也结束  需求: 模拟QQ下载更新包。  一个线程默认都不是守护线程。  */public class Demo7 extends Thread {public Demo7(String name){super(name);}@Overridepublic void run() {for(int i = 1 ; i<=100 ; i++){System.out.println("更新包目前下载"+i+"%");if(i==100){System.out.println("更新包下载完毕,准备安装..");}try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) { Demo7 d = new Demo7("后台线程"); d.setDaemon(true); //setDaemon() 设置线程是否为守护线程,true为守护线程, false为非守护线程。// System.out.println("是守护线程吗?"+ d.isDaemon()); //判断线程是否为守护线程。 d.start();  for(int i = 1 ; i<=100 ; i++){ System.out.println(Thread.currentThread().getName()+":"+i); } }}