首页 > 编程语言 > 详细

多线程复习

时间:2021-05-17 22:06:19      阅读:23      评论:0      收藏:0      [点我收藏+]

 

  • 线程一旦死亡就无法在此启动
  • 多线程的使用
    • 方法1:
      • 类t继承Thread类,重写run方法。
      • main主线程中调用t.start(),启动线程
    • 方法2
      • 类t实现Runable接口,重写run方法。
      • main主线程中调用new Thread(t).start(),启动线程
  • 多线程的原理
    • Thread底层实现了Runable接口,采用静态代理的形式对Runable接口功能进行了扩充
    • 静态代理
      • 格式:目标类和代理类实现了同一个接口
      • 目标类:只专注自己的功能
      • 代理类:包含目标类属性,代理类方法调用目标类方法,通过方法从上到下依次执行,可以待目标方法前后加入其他功能
  • Lambda函数的使用
    • 函数的作用:让代码更加简洁,编程更加高效
    • 函数的由来:java8加入的新功能。之前使用内部类、静态类、匿名内部类来依次简化代码。现在通过Lambda函数使代码更加简洁。
    • 使用条件:接口类必须是函数式接口——只含有一个方法的接口
    • 使用方法:T t=(int a)->{Sout("你好Lambda函数")}。说明:T类继承了函数式接口,可以通过Lambda创建实例对象。
  • 线程的生明周期
    • 创建状态——就绪状态——执行状态——死亡状态,就绪与运行状态中间有一个阻塞状态
    • 线程的sleep方法
      • 作用:指定线程阻塞的毫秒数,时间到达后立刻计入就绪状态。让线程进入阻塞状态。可以模拟网络延迟、倒计时。
      • 每个对象都有一个锁,sleep方法不会释放锁。
    • yield礼让方法、join插队并完全执行方法
    • 线程的优先级
      • 线程t.setPriority(最小1默认5最大10),>10抛异常
      • 重点:设置优先级在t.start()之前设置
  • 线程同步
    • synchronized同步方法或同步代码块,来使线程安全
      • 同步方法:synchronized void run(){}在方法的返回值前加synchronized,锁定当前的this类,来使线程安全
      • 同步代码块:synchronized(obj){同步的代码},obj是需要锁定的多线程共享的数据属性
      • 死锁
        • synchronized:抱住资源不放还想要其他被锁住的资源。
    • jdk5的lock锁,来使线程安全
      • 在线程需要加锁的地方,之前加上lock.lock();最后加上lock.unlock()。表示:当一个线程进入此方法中后上锁,执行完后解锁。
      • 使用方法:需要加锁的方法中,创建一个private final ReenTrantLock类的实体类lock,try{lock.lock();接需要锁住的代码}Finally{lock.unlock();}
  • 线程协作
    • 生产者消费者问题
      • 分析对象包括:消费者、生产者、容器
      • 生产者对象中有容器属性,和向容器存放数据的方法;消费者对象中有容器属性,和从容器中取出数据的方法。
      • 矛盾:容器满了则不能生产,容器没有产品则不能消费,但是消费者和生产者线程都是cpu随机调用执行,可能出现异常(例如容器满了继续生产)
      • 解决方案:使用Object类的wait方法和 notifyA ll方法,如果容器 满了,this.wait生产者等待,没满this.notifyAll消费者消费。
      • 解析:this表示调用此方法的线程,比如this.wait中this表示生产者,等待。this.notifyAll表示生产者通知消费者(或其他线程),使其他线程解除等待。

多线程复习

原文:https://www.cnblogs.com/youisme/p/14777656.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!