• 线程的创建和生命周期


    线程的创建:

    线程的创建有2种方法:

    1、继承Thread方法,重写run方法

    2、实现Runnable接口,实现run方法

    第一种:

    public class MyThread extends Thread{
        private int i=10;
        @Override
    public void run() {
            while(i++<100){
    //this.getName()获取当前执行的线程 Thread.currentThread()获得当前线程的名字 System.out.println(
    this.getName()+" "+Thread.currentThread()+" "+i); } } public static void main(String[] args) { MyThread my1=new MyThread(); my1.setName("Thread-1"); //给线程取个名字 MyThread my2=new MyThread(); my2.setName("Thread-2"); my1.start(); //开启线程 my2.start(); } }

    第二种:

    //一段源码
    
    public class Thread implements Runnable{
            Runnable target;
            @Override
            public void run() {
                if(target!=null){
                target.run();
                
                }
            }
        }
        
    public class MyRunnable implements Runnable{
      private int i;
        @Override
        public void run() {
            while(i++<100){
    //没有this.getName()方法 System.out.println(Thread.currentThread().getName()
    +" "+i); } } public static void main(String[] args) { MyRunnable my1=new MyRunnable(); MyRunnable my2=new MyRunnable();
    //Runnable 没有启动线程的方法,需要用Thread 类启动 Thread t1
    =new Thread(my1); t1.start(); Thread t2=new Thread(my2); t2.start(); } }

     线程的生命周期:

    1、当线程被创建并且启动后共经历了5种状态,新建、就绪、运行、阻塞、死亡

    1)当线程对象被创建出来为新建状态

    2)当执行start()方法时进入就绪状态,执行start()方法表明此线程可执行,至于什么时候执行取决于JVM调度,如果就绪的线程获得了CPU则为运行状态

    3)线程进入阻塞状态的情况:

    线程调用一个阻塞方法,方法返回前该线程一直阻塞。

    线程调用sleep方法进入阻塞。

    线程尝试获取同步监视器,但该同步监视器被其他线程持有。

    线程调用了suspend方法挂起

    4)线程解除阻塞,重新进入就绪状态的情况:

     调用的阻塞方法返回。

     调用的sleep到期。

     线程成功获取同步监视器。

     被suspend的方法挂起的线程被调用了resume方法恢复。

    5)线程的死亡状态就是结束状态:

    run()方法执行完毕

    线程抛出异常

    直接调用stop()方法

    判断线程是否死亡可以调用  isAlive()  方法,处于就绪、运行、阻塞的线程返回true,否则返回false;

    调用 stop和 suspend 会导致线程进入死锁状态

    对已经死亡的线程不能调用start() 方法

                                  

  • 相关阅读:
    P2029 跳舞
    P2502 [HAOI2006]旅行
    P4310 绝世好题
    P2857 [USACO06FEB]稳定奶牛分配Steady Cow Assignment
    P1131 [ZJOI2007]时态同步
    P2052 [NOI2011]道路修建
    P3141 [USACO16FEB]围栏Fenced In_Platinum
    ubuntu 12.04上安装QQ2013(转载)
    ubuntu 12.04 alt+tab无法切换窗口的问题(转载)
    Ubuntu 12.04 设置终端字体为文泉驿(转载)
  • 原文地址:https://www.cnblogs.com/wintersong/p/4751969.html
Copyright © 2020-2023  润新知