多线程基础理解(1)

多线程

多线程的理解

进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。

线程:不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。

一个程序运行之后至少有一个进程。一个进程里面可以包含多个线程,但至少包含一个线程。

并发和并行

并行是逻辑上同时发生,指在某一个时间内同时运行多个程序。

并发是物理上同时发生,指在某一个时间点同时运行多个程序。

多线程的优势

(1)进程之间不能共享内存,但线程之间可以共享内存。

(2)多线程来实现多任务并发比多进程的效率高。

多线程的实现

创建线程

(1)继承Thread类的创建

通过Thread类来创建并启动多线程的步骤:

1、自定义类MyThread继承Thread类。

2、重写run( )方法。

扫描二维码关注公众号,回复: 2481397 查看本文章

3、创建对象。

4、启动线程

public class MyThread extends Thread {  
   
   public void run() {  //重写run()方法,是因为run()方法体就是线程的执行体
          for(int x = 0; x < 100; x++) {  
                 System.out.println(getName()+ ":" + x);  // getName()方法就是返回调用该方法的线程名字
          }  
   }  
   public static void main(String[] args)
  {
       for(int i = 0 ; i < 100 ; i++)
     {
         System.out.println(Thread.currentThread().getName() + " " + i);//调用Thread类中的currentThread方法来获取当前的线程
           if(i == 20)
          {
           new MyThread().start();
           new MyThread().start();
          }
     }
  }
}  
在运行的过程中java程序运行的默认的主线程就是main()方法的方法体。


(2)实现Runnable接口创建线程

通过实现Runnable接口创建的步骤:

1、自定义类MyRunnable实现Runnable接口

2、重写run()方法

3、创建MyRunnable类的对象

4、创建Thread类的对象,并把3步骤的对象作为构造参数传递

public class MyRunnable implements Runnable {  
        
       public void run() {  
              for(int x = 0; x < 100; x++) {  
    
                     System.out.println(Thread.currentThread().getName()+ ":" + x);  
              }  }
         public static void main(String [] args) {
        	 for ( int i = 0 ; i < 100 ; i++)
        	 {
        		 System.out.println(Thread.currentThread().getName() + " " + i);
        	      
        		 if ( i == 20 )
        		 {
        			 MyRunnable mr = new MyRunnable();
        			 new Thread(mr , "线程1" ).start();
        			 new Thread(mr , "线程2" ).start();
        		 }
        	 }
         }
              
       }  

关于Runnable接口我也只会这一些基础的建立。

线程的生命周期

线程的生命周期有五个状态,分别是新建,就绪,运行,阻塞,死亡。

新建状态:

使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。

就绪状态:当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。

运行状态:如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

阻塞状态:如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。

死亡状态:一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态,结束的有三种方式

1、run()方法执行完成,线程正常结束。

2、线程抛出一个异常或错误。

3、直接调用stop()方法来结束。

线程的优先级

java 线程的优先级是一个整数,其取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。默认情况下,每一个线程都会分配一个优先级 NORM_PRIORITY(5)。

可以使用yield方法来调整线程的优先级。


未完待续

猜你喜欢

转载自blog.csdn.net/qq_41431119/article/details/80084003