多线程

多线程:

  什么是线程: 

      线程就是程序中单个的顺序执行流程,是一条执行路径;

        单线程:一个进程中如果有一条执行路径就是单线程

        多线程:一个程序中如果有多条执行路径就是多选线程.

  线程和进程的关系:

      进程负责获取资源,进程负责执行任务.一个进程中至少有一个线程.

多线程的作用:

    提高cpu的执行效率

    在java中实现线程的两种方式

        方式一: 继承thread类

         方式二:实现Ranable接口

  线程类中的两个方法:

      run方法:业务代码的重构 ,start方法启动线程

      设置和获取线程名称

        setName()设置线程名

      getName 返回此线程的名称

      CurrenThread 获取正在活动的线程对象的引用

  线程的优先级

    在java中线程的优先级有10级 最高为10 最低为1 

    最高级和最低级没有必然的优先关系,只是有概率优先.

   线程的调度模式

      java中的线程调度模式为抢占式调度模式

      还有分时调度模型

  线程控制

    sleep (毫秒数)使当前正在执行的线程停留指定的毫秒数(此方法会占用cpu时间片)

    join() 等待这个线程死亡,才会执行别的线程

    setDaemeon(true) 设置线程为守护线程

      线程的生命周期

      创建-->启动 ->就绪->运行->死亡(变成垃圾被回收)

    

  多线程引发的一系列问题

      多线程会引发多个线程操作一个数据区时导致数据出现安全问题

        1数据安全问题出现的条件

            1多线程环境

            2共享数据  

            3多条语句操作共享数据

      如何解决多线程问题

          基本思想:让程序没有安全问题的环境

      1奖代码锁起来,任意时刻只能有一个想成执行

         1 同步代码块

          2同步方法  锁是this

        3同步静态方法 锁是类名,class 是字节码文件

    线程安全的类 有什么

        1StringBuffer

        2vector 该类在1.2版本后 java collections framework 成员 该类实现了list接口

      lock锁

      lock是一个接口不能被实例化  因此我们将借助它的实现类ReentrantLock来进行实例化

        lock l = new ReentrantLock();

    lock锁对象提供两个方法

        1lock()加锁

        2unlock()解锁

    多线程中的经典案例 生产者消费之

        所谓生产者模式  包含了连个线程  1一个是生产者线程 2 一个是消费者线程

        为了解耦生产者和消费者之间的关系,通常会采用数据个公共区,并不需要关心生产者的行为

      objiect类的等待和唤醒方法

        notyify() 唤醒正在等待对象监视器的单个线程,自己进入监听状态

        notyifuall() 唤醒所有等待对象监视器的单个线程,自己进入监听状态

      wait() 导致当前线程进入监听状态,直到另一个线程调用该对象的notifiy方法.

      

原文地址:https://www.cnblogs.com/qmk-716/p/11758920.html