java 多线程基础知识2---同步机制
2014-04-27 20:00
302 查看
1.线程安全类
当一个类是无状态的类时,这个类就是线程安全的,因为该类没有共享的可变状态。当一个类是有一个共享的可变状态时,可以使用Atomic包中的类来保证线程安全。
当一个类有多个共享的可变状态时,那么为了保证线程安全,必须采用一定的同步机制来确保
对可变状态访问的原子性和可见性。
2.同步机制
2.1.synchronized代码块和synchronized方法如果将synchronized修饰方法,那么这个方法就具有同步机制。例如:
public synchronized static void xxxMethod(){}
如果在方法内部,synchronized可以形成同步代码块,例如:
synchronized(this){
// do something
}
synchronized 方法一般情况下会影响并发性能,所以在使用synchronized时,尽量将synchronized的范围缩小,
同时避免synchronized块中包含 不必要的非同步代码,或者计算耗时长,或者I/O操作耗时长的代码。总之一句话:
尽量缩小synchronized的代码范围,减少synchronized块的执行时间,提高并发性
2.2 volatile变量
当把变量声明为volatile类型后,在编译器和运行时都会注意到这个变量是共享的,因此就不会将该变量上的操作与其他内存操作一起重排序。
不要过度依赖volatile,仅当volatile变量能简化代码实现,以及对同步策略的验证时,才应该使用它。
volatile通常用作某个操作完成,中断,或者状态的标识。
当且仅当满足一下所有条件时,才能使用volatile:
1.对变量的写入操作不依赖当前变量值,或者你能确保只有单个线程更新变量的值。
2.该变量不会与其他变量一起纳入到不变性条件中。
3.在访问变量时不需要加锁。
总结:synchronized 不仅实现了操作的原子性,而且实现了内存可见性。而volatile只是实现了内存可见性。
相关文章推荐
- Java基础-多线程的同步机制
- 黑马程序员——Java基础——多线程的同步、死锁和等待唤醒机制
- java基础知识---多线程、同步
- Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别
- java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提
- (新手)java多线程基础知识——调度与同步
- JAVA基础知识之java多线程时数据同步问题
- Java基础知识笔记(五:多线程的同步问题)
- Java多线程1——基础知识
- Java 多线程(一) 基础知识与概念
- 黑马程序员-JAVA基础-多线程间的通信、等待唤醒机制和新特性
- <黑马程序员>---java基础---多线程知识
- Java基础知识之多线程
- Java Concurrency in Practice :基础知识(正确的同步 - 组合)
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Java 多线程(一) 基础知识与概念
- java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)
- Java基础-23总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程
- Java 多线程基础知识之线程封闭
- 黑马程序员0831_java基础知识+多线程部分