Java.线程生命控制

一个线程的产生是从我们调用了start方法开始进入Runnable状态,即可以被调度运行状态,并没有真正开始运行,调度器可以将CPU分配给它,真正运行其中的程序代码。线程在运行过程中,有以下几个可能的去向:
①没有任何阻隔,运行完成直接结束,也就是run()方法执行完毕。
②调度器将CPU分配给其他线程,这个线程又变为Runnable状态。
③请求锁旗标,却得不到,这时候它要等待对象的锁旗标,得到锁旗标后又会进入Runnable状态开始运行。
④遇到wait方法,他会被放入等待池中继续等待,直到有notify()或interrupt()方法执行,它才会被唤醒或打断开始等待对象锁旗标,等到锁旗标后进入Runnable状态继续执行。

控制线程声明周期的方法有很多种,如suspend方法、resume方法和stop方法。但不推荐这种方法。
不推荐使用suspend和resume是因为:
①会导致死锁。
②它允许一个线程(甲)通过直接控制另外一个线程(乙)的代码来直接控制那个线程(乙)。

stop能避免死锁,但是带来了另外的不足,如果一个线程正在操作共享数据段,操作过程没有完成就stop了的话,将会导致数据的不完整。因此stop方法也不提倡使用。

推荐使用控制run方法中循环条件的方法来结束一个线程。

 

//控制run方法中循环条件的方法来结束一个线程 class TestThread implements Runnable { private boolean bFlag=true; public void stopMe() { bFlag=false; } public void run() { while(bFlag) { System.out.println(Thread.currentThread().getName()+" is running!"); } if(!bFlag) //看一下所在线程在main循环了几次的时候结束的。 { System.out.println(Thread.currentThread().getName()+" is going out!-------------------------"); } } } class ThreadLife { public static void main(String [] args) { TestThread t=new TestThread(); new Thread(t).start(); for(int i=0;i<100;i++) { if(i==50) t.stopMe(); System.out.println(Thread.currentThread().getName()+" is running! "+i+" times"); } } }

你可能感兴趣的:(thread,String,Class)