美文网首页Java 杂谈Java
java 多线程概述

java 多线程概述

作者: 无敌锤子棒棒鸡 | 来源:发表于2019-04-26 14:54 被阅读0次
    线程
    为什么要使用多线程?
        1.更多的处理器核心
        2.更快的响应时间
        3.更好的编程模型
    
    线程优先级
    默认优先级为5,数值越大,优先级越高
    
    Linux和java线程的映射表
    https://blog.csdn.net/memory_nothing/article/details/83017653
    
    线程的六个状态
    NEW             —— 线程创建,还没有调用start()方法
    RUNNING         —— 运行中
    BLOCKED         —— 阻塞状态,表示线程阻塞于锁
    WAITING         —— 等待状态
    TIME_WAITING    —— 超时等待,不同于WAITING,可以在指定时间内自行返回
    TERMINATED      —— 终止状态
    
    守护线程
    暂时理解成辅助吧,当JVM中没有非守护线程时,JVM需要退出,所有守护线程终止(例如垃圾回收线程)
    
    启动和终止线程
    为什么弃用suspend()、resume()和stop()?
        1.以suspend()方法为例,在调用后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样容易引发死锁问题
        2.,stop()方法在终结一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定状态下
    
    线程间通信
    volatile和synchronized关键字
        关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性
        关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性
    
    等待/通知机制
    为什么需要等待/通知机制?
        因为如果没有这个机制,程序需要不停的轮询去获取资源,为了避免轮询,会采取sleep(),但是此时会出现两个缺点:
            1.难以确保及时性
            2.难以降低开销
    

    相关文章

      网友评论

        本文标题:java 多线程概述

        本文链接:https://www.haomeiwen.com/subject/ddafnqtx.html