多线程

Posted gqymy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程相关的知识,希望对你有一定的参考价值。

什么是线程:
  操作系统调度的最小单元是线程,也叫轻量级进程,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量
 
为什么使用多线程:
   更多的处理器核心
    更快的响应时间
    更好的编程模型
 
线程优先级:
    在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并发编程>

以上是关于多线程的主要内容,如果未能解决你的问题,请参考以下文章

什么是多线程,多进程?

多线程和多进程模式有啥区别

多线程Java多线程学习笔记 | 多线程基础知识

java中啥叫做线程?啥叫多线程?多线程的特点是啥

c++ 多线程与c多线程有啥区别?

IOS多线程安全(线程锁)