java高级基础之----------多线程(一)

 

  1. 创建方法一继承Thread类

    1. 当子类无父类继承时且需要具有线程特性时
    2. 创建步骤
      1. 定义一个类继承Thread类
      2. 覆盖Thread类中的run方法
      3. 直接创建Thread的子类对象创建线程
      4. 调用start方法开启线程会自动调用线程的任务run方法执行。
  2. 创建方法二实现Runnable接口

    1. 定义类实现Runnable接口
    2. 覆盖接口中的run方法,将线程的任务代码封装到run方法中
    3. 通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递
    4. 调用线程对象的start方法开启线程

注:实现Runnable接口的好处:

  1. 将线程的任务从线程的子类中分离出来,进行单独的封装,进行了单独的封装。按照面向对象的思想将任务封装成对象
  2. 避免了java单继承的局限性
  1. 获取线程名称

    1. 获取线程对象的名字   getName();
    2. 获取当前正在运行的线程对象    currentThread()
  2. 线程状态

  3. 线程同步

    1. 多线程同步代码块
      1. 定义
        1. 使用synchronized关键字加上一个锁对象来定义一段代码,这就叫同步代码块
        2. 当同步代码块使用的锁对象是同一个锁时,他们就是同步的
      2. 注意事项
        1. 锁对象可以是任意对象,但是被锁的代码需要保证是同一把锁,不能用匿名对象,匿名对象每个线程不是共用一个锁。无法起到同步的作用。
    2. 多线程同步方法    
      1. 定义
        1. 使用synchronized关键字修饰一个方法,该方法中所有的代码都是同步的
      2. 注意事项
        1. 静态的同步函数的锁是:字节码对象(类名.class;)
        2. 非静态的 同步函数的锁是:this
    3. 解决什么问题
      1. 当多个线程同时执行时某个线程还未完全执行完CPU就切换了线程,导致异常
    4. 什么时候使用
      1. 当多线程并发,有多段代码同时执行时,我们希望某一段代码执行的过程中CPU不要切换到其他线程工作,这是需要同步
      2. 如果两段代码是同步的,那么同一时间只能执行一段,在一段代码没执行结束之前,不会执行另外一段代码
    5. 怎么判断需要使用
      1. 线程间有共享数据
      2. 需要多次执行(有if,等循环)
    6. 死锁问题
      1. 多线程同步的时候,如果同步 代码嵌套,使用相同锁,就有可能出现死锁
      2. 所以尽量避免嵌套使用

版权声明:本博客为记录本人自学感悟,内容大多从网上学习与整理所得,若侵权请告知!

https://mp.csdn.net/postedit/80365677

猜你喜欢

转载自blog.csdn.net/qq_39657909/article/details/81178452