• 11.5(day21) 进程 线程 多线程 线程安全问题 单例模式 死锁 线程生命周期


    进程:

       正在进行中的程序

    线程:

       可独立运行的代码的片段

       所属于进程

    多线程:

       一个进程中有多个可独立运行的代码片段

    一个进程中至少有一个进程

    如果有一个线程的程序,称之为单线程程序

    java语言支持多线程

    所有的程序执行都在内存中开辟空间,依赖CPU执行,我们看的是CPU同时执行这些应用程序,其实CPU某一时刻只能执行一个程序,CPU坐着高速的切换动作

    创建线程:

        1.继承java.lang.Thread类

          1.定义类继承Thread类

          2.重写run方法(run即是子线程所要运行的代码)

          3.在主线程中创建子线程,并启动子线程

          弊端:

             由于java是单继承,如果类已经继承了其他类,不能再去继承线程类

             即是当前类没有继承其他类,是否继承线程,也是要考虑继承体系结构,不能去改变结构

        2.实现java.lang.Runnable接口

          1.定义类实现Runnable接口

          2.在类中实现run方法

          3.创建线程对象,thread对象

          4.将实现类对象,作为参考传递给thread对象的构造方法

          5.调用start方法启动线程

    获取当前线程对象:

        Thread.currentThread() 该方法写到哪里获取的就是所在的线程的对象

    获取线程名称:

        getName()

    设置线程名:

        setName(name)

    线程优先级:

        1-10

        默认级别:5

        getPriority():获取优先级

        setPriority(number):设置优先级

    线程安全问题:

        原因:

           多个线程操作同一个资源时,对该资源操作的代码不止一行时,一个线程没有执行完关于该资源的执行代码,另一个线程参与进来执行

        解决办法:

           一个线程执行时,另一个线程不能参与执行

           同步代码块:

              synchronized(锁对象){

              }

              对象可以为任意对象

           前提:

              1.大于等于两个以上的线程

              2.保证多线程使用的是同一个锁对象

           好处:

              解决了多线程安全问题

           弊端:

              效率降低了  

    单例模式:

        保证对象的唯一性

        1.将构造方法私有化

        2.创建本类的对象

        3.创建方法,返回本类对象

        两种写法:

            饿汉式:多线程访问时没有安全问题

            懒汉式:多线程访问时有安全问题,不能保证对象的唯一,需要加入同步解决问题

    死锁:

        实际开发中不能出现死锁

        程序卡在某一个地方,不能继续向下执行,这种现象--死锁

    锁对象:

        synchronized可以用来修饰方法,修饰的方法具备了同步的特性

          1.实例同步方法:this

          2.静态同步方法:类名.class

    线程生命周期:

        新建状态:new Thread(),new Thread(new Runnable(){})

        可运行状态:调用start(),有执行资格,等到CPU调度

        正在运行状态:CPU调度该线程

        终止状态:run方法结束

        堵塞状态:正在运行进入到该状态,主动放弃执行资格,CPU不在调度

              startc sleep(时间):让线程睡一会,时间到了自然醒---可运行状态

              wait():让线程等待   notify():唤醒处于等待状态的线程---可运行状态

              join():加入线程

    当多线程中某一个线程发生了异常,这个线程停止运行并返回异常信息,其他线程继续运行不会停止,即对其他线程没有影响  

  • 相关阅读:
    经典javascript
    大话prototype
    DataTable使用方法总结
    实验四 Web服务器1socket编程
    2.4 OpenEuler中C语言中的函数调用测试
    20191323王予涵第13章学习笔记
    20191323王予涵第十三章学习笔记
    2.5 OpenEuler 中C与汇编的混合编程
    个人贡献
    20191323王予涵第十二章学习笔记
  • 原文地址:https://www.cnblogs.com/jihongtao/p/9908815.html
Copyright © 2020-2023  润新知