Java多线程实现方式及生命周期

Java中线程的实现方式

1.实现Runnable接口

class MyThread implements Runnable{
      private String name ;       // 表示线程的名称 
      public MyThread(String name){ 
          this.name = name ;      // 通过构造方法配置name属性 
      } 
      public void run(){  // 覆写run()方法,作为线程 的操作主体 
          for(int i=0;i<10;i++){ 
              System.out.println(name + "运行,i = " + i) ; 
         } 
     } 
};

public class RunnableDemo01{ 
     public static void main(String args[]){ 
         MyThread mt1 = new MyThread("线程A ") ;    // 实例化对象 
         MyThread mt2 = new MyThread("线程B ") ;    // 实例化对象 
         Thread t1 = new Thread(mt1) ;       // 实例化Thread类对象 
         Thread t2 = new Thread(mt2) ;       // 实例化Thread类对象 
         t1.start() ;    // 启动多线程 
         t2.start() ;    // 启动多线程 
     } 
};

2.继承Thread类

​
class MyThread extends Thread{
      private String name ;       // 表示线程的名称 
      public MyThread(String name){ 
          this.name = name ;      // 通过构造方法配置name属性 
      } 
      public void run(){  // 覆写run()方法,作为线程 的操作主体 
          for(int i=0;i<10;i++){ 
              System.out.println(name + "运行,i = " + i) ; 
         } 
     } 
};

public class ThreadDemo01{ 
     public static void main(String args[]){ 
         MyThread mt1 = new MyThread("线程A ") ;    // 实例化对象 
         MyThread mt2 = new MyThread("线程B ") ;    // 实例化对象  
         mt1.start() ;    // 启动多线程 
         mt2.start() ;    // 启动多线程 
     } 
};

​

线程的5种状态

线程一般具有5种状态,分别是创建、就绪、运行、阻塞、终止,各状态说明如下:

  • 创建状态 

在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时它已经有了相应的内存空间和其他资源,但还处于不可运行状态。新建一个线程对象可采用Thread 类的构造方法来实现,例如 “Thread thread=new Thread()”。

  • 就绪状态 

新建线程对象后,调用该线程的 start() 方法就可以启动线程。当线程启动时,线程进入就绪状态。此时,线程将进入线程队列排队,等待 CPU 服务,这表明它已经具备了运行条件。

  • 运行状态 

当就绪状态被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的 run() 方法。run() 方法定义该线程的操作和功能。

  • 阻塞状态 

一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入/输出操作,会让 CPU 暂时中止自己的执行,进入阻塞状态。在可执行状态下,如果调用sleep(),suspend(),wait() 等方法,线程都将进入阻塞状态,发生阻塞时线程不能进入排队队列,只有当引起阻塞的原因被消除后,线程才可以转入就绪状态。

  • 死亡状态 

线程调用 stop() 方法时或 run() 方法执行结束后,即处于死亡状态。处于死亡状态的线程不具有继续运行的能力。

线程同步

一个多线程程序如果通过Runnable实现,则类中的属性会被多个线程共享,那么多线程操作同一个资源时就可能出现资源同步问题。

解决方法:

1.同步代码块

synchronized(同步对象){
   需要同步的代码
}

2.同步方法

synchronized 方法返回值 方法名称(参数列表){ 
 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章