关闭
当前搜索:

Java与线程安全

线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者调用方进行其他的协调操作,调用这个对象的行为都可以获得正确的结果,则该对象是线程安全的。 Java语言中的线程安全 1. 不可变 不可变的对象一定是线程安全的,只要其被正确地创建出来。基础数据类型只要声明为final就是不可变的,对象可以通过将自己的所有带有状态的变量都声...
阅读(30) 评论(0)

Java与线程

线程的实现 1. 使用内核线程(Kernel-Level Thread)实现 内核线程是由操作系统内核直接支持的线程,由内核完成线程切换,通过操纵调度器进行调度,内核负责将线程任务映射到处理器上。程序并不会直接使用内核线程,而是使用其提供的高级借口,即轻量级进程(Light Weight Process)。因为LWP和KLT是1:1的关系,所以这种实现被称为一对一的线程模型。 这一实现方式的...
阅读(51) 评论(0)

Java先行发生(happens-before)原则

Java语言中存在一个“先行发生”原则,可以用于判断线程是否安全,数据是否存在竞争。 定义: 如果操作A先行发生于操作B,那么在操作B之前,操作A产生的影响能被操作B观察到。 Java内存模型存在以下先行发生关系,无须额外的同步操作。而不满足以下规则的两个操作,就没有顺序性保障,虚拟机可以对其进行指令重排序。 程序次序规则(Program Order Rule):在一个线程内,按照代码顺序(...
阅读(42) 评论(0)

Java volatile关键字

在面试中,经常会被问到volatile关键字的作用和原理,故而整理出本篇文章进行说明。 (提示:阅读本文需要具备内存操作相关知识,可以看这里) volatile是Java保留的一个关键字,可以用于修饰变量,有以下两个语义: 1. 保证此变量对所有线程的可见性 Java内存模型保证了对于volatile修饰的变量,load和use操作必须连续出现,assign和store操作必须连续出现。这...
阅读(109) 评论(0)

Java八种内存操作

对于并发环境下的线程工作内存与主内存同步实现, Java内存模型定义了8种内存操作来完成: 1. lock:主内存操作,锁定变量,标识其为线程独占的状态。 2. unlock:主内存操作,解锁变量,将其从线程独占的状态中释放出来。 3. read:主内存操作,读取变量到工作内存。 4. load:工作内存操作,将读取到的变量赋值给工作内存中的变量副本。 5. use:工作内存操作,将变量...
阅读(51) 评论(0)
    个人资料
    • 访问:278次
    • 积分:58
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档