Java线程理解(2) 线程生命周期

本文深入探讨Java线程的基本状态管理,包括可执行、执行中、被阻断状态,以及如何通过sleep()、wait()方法使线程进入阻断状态。同时介绍线程的停止方式和线程间协作的join()方法。通过具体代码示例,展示如何有效利用多线程提升程序性能。

1.Thread状态图
在调用Thread实例start()方法后,基本状态可以分为可执行(Runnable)、被阻断(Blocked)、执行中(Running),状态转移如下:
这里写图片描述

实例化Thread并start()后,线程进入Runnable(可执行)状态,此时线程尚未真正开始执行run()方法,必须等待CPU schedule(CPU 一种排班器)排入CPU执行,线程才会执行run()方法,进入Running状态。
进入Blocked状态状况:

  1. 调用Thread.sleep()方法
  2. 进入synchronized前竞争对象锁定的阻断
  3. 调用wait()的阻断。
  4. 等待输入输出完成等。。

需要注意的是:运用多线程时,当某线程进入Blocked时,让另一线程排入CPU执行,避免CPU空闲,可以有效改变效能。
如下是Thread.sleep()进入Blocked的例子,若其他线程调用该线程的方法,会抛出异常,这是让线程醒来的方式。

public class SleepInterrupt{
    public static void main(String [] args){
        Thread thread =new Thread(){
            @Override
            public void run(){
                try{
                    Thread.sleep(9999999);
                }catch(InterruptedException ex){
                    System.out.println("我醒了");
                }
            }
        };
        thread.start();
        thread.interrupt();//主线程调用interrupt的方法
    }
}

运行结果:
这里写图片描述

2.安插线程
如果A线程正在运行,流程中允许B线程加入,等到B线程执行完毕后再继续执行A线程,可以使用join()的方法来完成。

public class JoinThread{
    public static void main(String [] args){
        System.out.println("Main主线程开始...");
        Thread thread2 =new Thread(){
            @Override 
            public void run(){
                try{
                    System.out.println("线程2开始...");
                    for(int i=0;i<10;i++){
                        Thread.sleep(1000);
                        System.out.println("线程2执行...");
                }
                System.out.println("线程2将结束...");
            }catch(InterruptedException ex){
                ex.printStackTrace();
                }
            }
        };
        thread2.start();

        try{
            //Thread2加入主线程中
            thread2.join();
        }catch(InterruptedException ex){
             ex.printStackTrace();
            }
        System.out.println("主线程将结束..."); 
    }
}

执行结果:
这里写图片描述

2.线程停止
java 线程的停止在如下链接有很清晰的解释

http://blog.youkuaiyun.com/anhuidelinger/article/details/11746365

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值