线程状态

来源:互联网 发布:南开创元java 编辑:程序博客网 时间:2024/06/06 08:40

三.线程状态:

新生状态:用new关键字或者Thread类或者子类建立一个线程对象

就绪状态:start方法进入

运行状态:run方法

阻塞状态:让出CPU暂时停止自己的状态

死亡状态:一个是正常运行的线程完成它的全部工作,另一个强制终止(stop或destroy),不推荐

四.停止线程(重点):

    1 自然终止,线程正常执行完毕

    2 外部干涉

          1)  线程类中定义线程体使用的标识

          2)  线程体使用该标识

          3)  提供对外的方法改变该标识

          4)  外部根据条件调用该方法

 

package thread.status;public class stop {public static void main(String[] args) {Study s = new Study();new Thread(s).start();// 外部干涉for (int i = 0; i < 1000; i++) {if (i == 500) {s.stop();}System.out.println("main....-->" + i);}}}class Study implements Runnable {// 1)线程中定义线程体使用的标识private boolean flag = true;@Overridepublic void run() {// 2)线程体使用该标识while (flag) {System.out.println("studythread...");}}// 3)对外提供方法改变标识public void stop() {this.flag = false;}}

五.线程阻塞

  1   join:合并线程

package thread.status;/** * join合并线程 *  * @author Administrator * */public class JoinDemo1 extends Thread {public static void main(String[] args) throws InterruptedException {JoinDemo1 demo = new JoinDemo1();Thread t = new Thread(demo);// 新生t.start();// 就绪// cpu调度运行for (int i = 0; i < 1000; i++) {if (i == 50) {t.join();// main方法阻塞}System.out.println("main...." + i);}}@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("join....." + i);}}}

  2    yield:暂停当前正在执行的线程,并执行其他线程。 static

package thread.status;public class yieldDemo1 extends Thread {public static void main(String[] args) throws InterruptedException {yieldDemo1 demo = new yieldDemo1();Thread t = new Thread(demo);// 新生t.start();// 就绪// cpu调度运行for (int i = 0; i < 1000; i++) {if (i % 5 == 0) {// 暂停本线程mainThread.yield();}System.out.println("main...." + i);}}@Overridepublic void run() {for (int i = 0; i < 1000; i++) {System.out.println("join....." + i);}}}


  3    sleep:休眠,暂停当前线程,不释放锁

       1)  与时间相关:倒计时

       2)  模拟网络延时

package thread.status;/** * 倒数十个数,一秒内打印一个 *  * @author Administrator * */public class SleepDemo1 {public static void main(String[] args) throws InterruptedException {int num = 10;while (true) {System.out.println(num--);Thread.sleep(1000);// 暂停if (num <= 0) {break;}}}}


0 0
原创粉丝点击