线程

作者: shiyuzhe | 来源:发表于2019-05-27 14:30 被阅读0次

你掌握线程吗?他是Java并发的基础元素,理解、操作和诊断线程你都熟悉吗?下面有几个问题我们一起来看一下吧:

  • 线程到底是什么
  • 线程和进程有什么区别?
  • 有什么因素可能影响到线程的状态?
  • 线程部分API使用建议

是什么?

在操作系统中,线程是系统调度的最小单元,他有自己的私有空间。一个进程可以包含多个线程,进程的私有空间可以被线程门共享。

线程和进程有什么区别?

在Android中,一个进程是一个独立的运行环境,可以看成是一个应用程序或应用(一个程序可以有多个进程),不同的进程使用不同的内存空间
在操作系统中,线程是系统调度的最小单元,是进程中执行的一个任务
一个进程可以有多个线程,每条线程并行执行不同的任务
进程中的不同线程共享一片相同的内存空间(文件描述符、虚拟地址空间等),线程拥有独立的空间存储本地数据(栈Stack、寄存器Register、本地存储ThreadLocal等)

有什么因素可能影响到线程的状态?

  • 自身方法:start,join等待线程结束,yield告诉调度器要主动让出CPU
  • 基类Object的destroy/notify/notifyAll方法,本质是Monitor获取和释放的能力,是基本的线程间通信方式。
  • 并发类库中的工具,as CountDownLatch.await()让当前线程进入等待状态,可看作线程间通信的Signal


    thread.png

线程部分API

守护线程

不会影响程序退出,UI Thread和默认创建的新Thread是非守护的。在需要一个长期驻留且不影响应用退出的服务程序时可以使用。thread.isDaemon = true

Spurious wakeup

虚假唤醒,在没有任何线程广播或者发出信号的情况下线程被唤醒。产生诡异的并发问题,推荐编写方式

while(isTrue){doSth()}  而不是if(isTrue){doSth()}
自旋锁

Thread.onSpinWait()是一种针对短期等待的性能优化技术,只是对JVM的一种暗示,没有行为上的保证

ThreadLocal

在线程生命周期内有效,可以保存线程私有信息,需要慎用。
数据存储于线程相关的ThreadLocalMap中,内部条目是弱引用。当key为null时变成废弃条目,value需要回收。通常弱引用会和引用队列配合清理机制使用,但ThreadLocal是个意外
所以废弃条目回收需要 显示触发,或者等待线程结束 才能回收相应ThreadLocalMap,这也是大部分OOM的来源,所以一定要自己负责remove并不和线程池配合

相关文章

  • Android

    线程间通信 主线程和工作线程主线程和工作线程 工作线程与工作线程工作线程与工作线程 为什么主线程Looper.lo...

  • 三、操作系统之线程

    前言 什么是线程 引入线程的原因 线程的概念 线程和进程的关系 线程结构 线程有点 多线程模型 用户线程和内核线程...

  • Thread

    队列 线程锁 多线程,线程池 队列 多线程爬虫示例 多线程 自定义线程 线程池

  • 总结多线程与设计模式+synchronized+性能+高吞吐+死

    Java线程 Java语言的线程 何谓线程 线程启动 线程的暂时停止 线程的共享互斥 线程的协调 线程的状态转移 ...

  • 多线程编程

    摘要 线程概念,线程与进程的区别与联系学会线程控制,线程创建,线程终止,线程等待了解线程分离与线程安全学会线程同步...

  • java线程池

    线程VS线程池 普通线程使用 创建线程池 执行任务 执行完毕,释放线程对象 线程池 创建线程池 拿线程池线程去执行...

  • java并发之守护线程

    java中有两种线程,用户线程和守护线程用户线程:主线程停止时,用户线程不会停止守护线程:主线程停止时,守护线程也...

  • Java线程池的使用

    线程类型: 固定线程 cached线程 定时线程 固定线程池使用 cache线程池使用 定时调度线程池使用

  • 线程基础知识

    线程学习 线程的基础知识 线程是什么? 线程和进程的关系 线程的6个状态 线程优先级 主线程、多线程、后台线程的概...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

网友评论

      本文标题:线程

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