java多线程

一、概念开始:

1、进程:

1)直译:正在进行中的程序

2)解释:执行一个程序时,会在内存中为程序开辟空间,这个空间就是一个进程。

3)注意:一个进程中不可能没有线程,进程只是开辟一个空间,并不执行,执行的是线程。

2、线程:

1)定义:就是进程中一个负责执行的控制单元(执行路径)

2)注意:一个进程中可以有多个执行路径,成为多线程;一个进程中至少有一个线程

3、任务:

开启多个线程,是为了同时运行多个内容,这个内容就是任务

二、多线程的初步认识

jvmjava虚拟机)中的多线程解析:jvm启动时,就启动了多线程。其中至少有两个线程,执行main函数的主线程和负责垃圾回收的线程

解释:在执行main函数中任务的时候,会开启一条线程,当运行垃圾越来越多,又会有垃圾回收任务,所以垃圾回收线程开启。其中,main方法任务的代码都定义主函数代码中。

三、线程的创建

1、继承Thread类创建多线程

1)创建类继承Thread

2)覆盖Thread类中的run()方法,将线程任务封装到run

代码实例:

publicclass ThreadDemo2 extends Thread {
   //覆盖父类的run方法
   publicvoid run() {
      //运行任务
      show();
   }
   public  void show() {
      for(inti=1;i<10;i++){
         System.out.println(i+super.getName());
      }
   }
}

//调用

Threadthread = new ThreadDemo2();
Threadthread2 = new ThreadDemo2();
thread.start();
thread2.start();


2、实现Runnable接口创建多线程

1)定义Runnable类实现接口

2)覆盖Runnable接口中run()方法,将线程的任务封装到run

3)通过Thread类创建线程对象,并将接口的子类对象作为Runnable类的构造函数进行传递

4)调用线程对象的start方法开启线程

注意:为什么要有(3)步骤呢?因为,线程的任务都是封装在Runnable接口子类对象的run()方法中。

代码实例:

publicclass RunnableDemo implements Runnable{
   @Override
   publicvoid run() {
      show();
   }
   publicstaticvoid show(){
      System.out.println("1");
   }
}


调用:

RunnableDemorunnableDemo = new RunnableDemo();
Threadthread3 = new Thread(runnableDemo);
Threadthread4 = new Thread(runnableDemo);
thread3.start();
thread4.start();


 

四、多线程的生命周期

1、新建状态:使用new创建一个线程后,在调用start方法前,该线程只是一个空线程,只具备的一些特性,系统还未为其分配资源

2、就绪状态:调用start()方法后,系统为其分配除cpu之外的所需资源。此外,当处于运行时的线程调用了yield()方法,那么该线程会被暂时剥夺cpu资源,重新进入就绪状态

3、运行状态:Java运行系统通过调度选中一个处于就绪状态的线程,使其占有CPU并转为运行状态。此时,系统真正执行线程的run()方法。可以通过Thread类的isAlive方法来判断线程是否处于就绪/运行状态:当线程处于就绪/运行状态时,isAlive返回true,当isAlive返回false时,可能线程处于阻塞状态,也可能处于停止状态。

4、阻塞状态:一个正在运行的线程因某些原因不能继续运行时,就进入阻塞状态。

这些原因包括:

1)当执行了某个线程对象的sleep()等阻塞类型的方法时,该线程对象会被置入一个阻塞集内,等待超时而自动苏醒。

2)当多个线程试图进入某个同步区域时,没能进入该同步区域的线程会被置入锁定集,直到获得该同步区域的锁,进入就绪状态。

3)当线程执行了某个对象的wait()方法时,线程会被置入该对象的等待集中,直到执行了该对象的notify()方法wait()/notify()方法的执行要求线程首先获得该对象的锁。

5、死亡状态:线程在执行完run()方法后进入死亡状态。此外,如果线程执行了interrupt()stop()方法,那么它也会以异常退出的方式进入死亡状态

 

注:终止线程的三种方法:

1)使用退出标志,使线程正常退出,也就是当run方法完成后线程终止,推荐使用

2)使用stop方法强制终止线程(这个方法不推荐使用,因为stopsuppendresume一样,也可能发生不可预料的结果)

3)使用interrupt方法终端线程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值