Java多线程:线程同步与关键字synchronized
一、同步的特性
1. 不必同步类中所有的方法, 类可以同时拥有同步和非同步方法.
2. 如果线程拥有同步和非同步方法, 则非同步方法可以被多个线程自由访问而不受锁的限制. 参见实验1:http://blog.csdn.net/huang_xw/article/details/7318561
3. 如果两个线程要执行一个类中的同步方法, 并且两个线程使用相同的实例来调用方法, 那么一次只能有一个线程能够执行方法, 另一个需要等待, 直到锁被释放. 参见实验2:http://blog.csdn.net/huang_xw/article/details/7318571
4. 如果两个线程要执行一个类中的不同同步方法, 并且两个线程使用相同的实例来调用方法, 那么一次只能有一个线程能够执行方法, 另一个需要等待, 直到锁被释放. 因为一个实例对象就一把锁. 参见实验3:http://blog.csdn.net/huang_xw/article/details/7318578
5. 不光是类实例, 每一个类也对应一把锁, 这样我们也可将类的静态成员函数声明为synchronized, 以控制其对类的静态成员变量的访问. 参见实验4: http://blog.csdn.net/huang_xw/article/details/7318588
二、synchronized的意义
synchronized用于多线程设计, 有了synchronized关键字, 多线程程序的运行结果将变得可以控制. synchronized关键字用于保护共享数据.
三、synchronized实现同步的机制
synchronized依靠"锁"机制进行多线程同步, "锁"有2种, 一种是对象锁, 一种是类锁.
四、synchronized关键字可以修饰的对象
1. synchronized{static方法 or 普通方法} 函数的修饰符, 就是同步方法.
2. synchronized{修饰代码块} 可作为函数内语句的修饰符, 就是同步语句块
3. synchronized{对象引用} 注意对象必须是线程安全的.(比如: StringBuffer在JDK1.5中是线程安全的, 而数组, ArrayList是不安全的). 参见实验5:http://blog.csdn.net/huang_xw/article/details/7318593
附: 解决线程不安全的方法:
1. 如果对象是immutable, 则是线程安全的, 例如: String, 可以放心使用.
2. 如果对象是线程安全的, 例如: StringBuffer, 则放心使用.
3. 有条件线程安全, 对于Vector和Hashtable一般情况下是线程安全的, 但是对于某些特殊情况, 需要通过额外的synchronized保证线程安全.
4. 使用synchronized关键字.
相关文章
- JAVA多线程和并发基础面试问答
- Java多线程--线程操作范例
- Java项目收藏
- java 23种设计模式 深入理解
- java多线程的等待唤醒机制及如何解决同步过程中的安全问题
- JAVA UUID 生成唯一标识
- Java实现蓝桥杯快乐数
- java实现排座位
- java实现BellmanFord算法
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- java多线程 -- 线程池
- [Java] Check a Database call return value is empty list
- java 15:配置gc log
- JAVA实现多线程的两种方法
- Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger
- java多线程 -- ReadWriteLock 读写锁
- java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
- 【学习总结】java数据结构和算法-第二章-数据结构和算法概述
- 【JAVA】 04-Java中的多线程
- Java synchronized的CPU层面实现细节
- java juc包多线程编程案例:Executor入门示例
- java多线程分块上传并支持断点续传最新修正完整版本[转]
- Java多线程(全知识点)
- 阿里规约《线程资源必须通过线程池提供,不允许在应用中自行显式创建线程》&Java 线程池和多线程编程 ——线程池理解与创建
- 【华为OD机试 2023】 优选核酸检测点(C++ Java JavaScript Python)
- Java通过开启线程池实现多线程
- Java开发技术之成为高级java工程师必须学习的三个技术
- JAVA语言之Java 中不同的并行实现的性能比较
- Java 多线程实战案例之消费者,生产者
- 【java】Java并发编程--Java实现多线程的4种方式