线程的创建和生命周期

线程的创建:

线程的创建有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() 方法

                              

原文地址:https://www.cnblogs.com/wintersong/p/4751969.html