多线程基础

简介: 1、线程的生命周期如图1-1图1-1线程的生命周期一共有五个状态,new、runnable、running、blocked、dead    1、new:刚创建,并未运行的线程   处于not alive状态;    2、runna...

1、线程的生命周期

如图1-1

img_57c161aa6013626303f85b649de4f4c0.png
图1-1

线程的生命周期一共有五个状态,new、runnable、running、blocked、dead

    1、new:刚创建,并未运行的线程   处于not alive状态;

    2、runnable:就绪状态,调用start()方法之后,等待cpu分配资源,在分配资源之前,线程不执行,但是处于alive状态;

    3、running:运行状态,runnable状态的线程获取的cpu资源之后,进入运行状态;

    4、blocked:堵塞状态,由于某种原因,导致线程让出cpu资源,暂定自己的执行,进入堵塞状态;

        (1)、sleep():时间到之后可自动恢复到就绪状态;join(),把并行的方法转换为串行,前面线程执行完毕,后面线程恢复到就绪状态(其实join方法的原理就是调用了wait方法)

        (2)、wait():调用notify()方法或者notifyAll()方法可以回到就绪状态

        (3)、被另一个线程阻塞、调用suspend方法,可通过resume方法恢复

2、守护线程

    简单理解为后台运行线程,进程结束,守护线程自然结束,线程对象中的daemon属性设置为true,则可设置为守护线程,比较经典的守护线程就是JVM中的垃圾回收,内存管理等,都是守护线程

3、线程中的异常处理

    线程是独立执行的代码片段,线程的问题应该由线程自己来解决

    出现checked Exception可直接通过try/catch进行处理

    出现unchecked Exception,需要注册一个事件进行处理

4、线程安全

    (1)、Java的内存模型,主要包含工作内存和主内存,主内存就是平时所说的堆内存,存放类实例,静态变量等,是多个线程共享的,正因为是多个线程共享的所以会出现线程安全问题,如图4-1所示


img_1a7ac86897435f4b7c750464bdb0bc03.png
4-1

        当线程操作某个对象时

            (1)、从主内存中复制变量到工作内存中(read and load)

            (2)、执行代码,改变共享变量值(use and assign)

            (3)、用工作内存数据刷新主内存中相关数据(store and write)

        所以,单个线程与线程的工作内存之间有了相互隔离的效果,称之为可见性问题

        实现线程安全的三种方法

        1、多实例

        2、使用java.util.concurrent下的类库

        3、使用锁机制,synchronized、lock方式

相关文章
|
6月前
|
存储 Linux 调度
Linux系统编程 多线程基础
Linux系统编程 多线程基础
30 0
|
5月前
|
Java API 调度
并发编程系列教程(01) - 多线程基础
并发编程系列教程(01) - 多线程基础
38 0
|
7月前
|
Java 程序员 调度
多线程(初阶)——多线程基础
多线程(初阶)——多线程基础
59 0
|
Java API 调度
并发编程之多线程基础
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。
并发编程之多线程基础
|
缓存 安全 Java
6. 多线程基础
对一个程序的运行状态, 以及在运行中所占用的资源(内存, CPU)的描述; 一个进程可以理解为一个程序; 但是反之, 一个程序就是一个进程, 这句话是错的。
71 0
6. 多线程基础
|
Java 编译器 程序员
多线程基础(下)
多线程基础(下)
86 0
多线程基础(下)
|
安全 Java 编译器
多线程基础(上)
多线程基础(上)
52 0
多线程基础(上)
|
SpringCloudAlibaba 安全 前端开发
JUC系列(一) 多线程基础复习
问:如何学习JUC? 答: 源码 + Java帮助文档 面试高频, juc 其实就是 Java.util 包下的线程分类的工具
JUC系列(一) 多线程基础复习
|
算法 Java 调度
【多线程基础知识】
【多线程基础知识】
106 0
|
存储 缓存 安全