博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程基础
阅读量:6304 次
发布时间:2019-06-22

本文共 989 字,大约阅读时间需要 3 分钟。

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方式

转载地址:http://eubxa.baihongyu.com/

你可能感兴趣的文章
SSL/TLS原理详解
查看>>
Docker 自定义SSH服务镜像
查看>>
JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改
查看>>
configure: error: in `/root/httpd-2.2.11/srclib/apr': c
查看>>
CentOS7搭建Kubernetes-dashboard管理服务
查看>>
buildroot下查找外部编译器通过ext-toolchain-wrapper调用的参数
查看>>
MySQL Replication 主主配置详细说明
查看>>
Linux的任务调度
查看>>
在Android studio中添加jar包方法如下
查看>>
iframe 在ie下面总是弹出新窗口解决方法
查看>>
分享10款漂亮实用的CSS3按钮
查看>>
安装nginx 常见错误及 解决方法
查看>>
Gorun8电子商城
查看>>
在之前链表的基础上改良的链表
查看>>
android编译系统makefile(Android.mk)写法
查看>>
MD5源代码C++
查看>>
Eclipse 添加 Ibator
查看>>
Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
查看>>
Python编程语言
查看>>
十四、转到 linux
查看>>