• 多线程


    什么是线程:
      操作系统调度的最小单元是线程,也叫轻量级进程,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量
     
    为什么使用多线程:
       更多的处理器核心
        更快的响应时间
        更好的编程模型
     
    线程优先级:
        在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线 程构建的时候可以通过setPriority(int)方法来修改优先级,默认优先级是5,优先级高的线程分 配时间片的数量要多于优先级低的线程。设置线程优先级时,针对频繁阻塞(休眠或者I/O操 作)的线程需要设置较高优先级,而偏重计算(需要较多CPU时间或者偏运算)的线程则设置较 低的优先级,确保处理器不会被独占。在不同的JVM以及操作系统上,线程规划会存在差异,
    有些操作系统甚至会忽略对线程优先级的设定
     
    线程的状态:
    Deamon线程:
       Daemon线程是一种支持型线程,因为它主要被用作程序中后台调度以及支持性工作。这 意味着,当一个Java虚拟机中不存在非Daemon线程的时候,Java虚拟机将会退出。可以通过调 用Thread.setDaemon(true)将线程设置为Daemon线程
     
    线程中断:
        线程通过检查自身是否被中断来进行响应,线程通过方法isInterrupted()来进行判断是否 被中断,也可以调用静态方法Thread.interrupted()对当前线程的中断标识位进行复位。如果该 线程已经处于终结状态,即使该线程被中断过,在调用该线程对象的isInterrupted()时依旧会返 回false
        线程通过中断操作和cancel()方法均可使线程得以终止
     
    过期的suspend()、resume()和stop():
        suspend()、resume()和stop()方法完成了线程的暂停、恢复和终 止
        不建议使用的原因主要有:以suspend()方法为例,在调用后,线程不会释放已经占有的资 源(比如锁),而是占有着资源进入睡眠状态,这样容易引发死锁问题。同样,stop()方法在终结 一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,
    因此会导致程序可能工作在不确定状态下
     
    线程间通信:
            等待通知机制:
                等待/通知机制,是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或notifyAll()方法,线程A收到通知后从对象O的wait()方法返回,进而执行后续操作。两个线程通过对象O完成交互,而对象上的wait()和notify()的关系如同开关信号一样,用来完成等待方和通知方之间的交互工作
     
            等待/通知的经典范式:
                等待方原则:
                    1.获取对象的锁
                    2.如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件
                    3.条件满足则执行对应的逻辑
                通知方原则:
                    1.获得对象的锁
                    2.改变条件
                    3.通知所有等待在对象上的线程

     

    来自<java并发编程>

  • 相关阅读:
    图与链表的深拷贝
    Codeforces Round #686(Div.3) [C- Sequence
    前缀和
    递归改非递归
    STL源码剖析笔记
    第六章 进程
    C++ 设计模式--模板模式、策略模式、观察者模式
    宏定义方式 进行枚举类型和枚举类型的相互转换
    Linux常见信号介绍
    git rebase 操作
  • 原文地址:https://www.cnblogs.com/gqymy/p/11470639.html
Copyright © 2020-2023  润新知