1.线程简介
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏
2.锁的原理
Java中每个对象都有一个内置锁。
当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。
关于锁和同步,有一下几个要点:
- 每个对象只有一个锁,提到同步时因该清楚在哪个对象上同步
- 每个对象只有一个锁,一个同步方法A获得锁后,其他线程无法获得这个实例的任何(方法A以及其他的)同步方法或同步块(同步块的锁也是该实例)
- 一个线程进入同步方法A后,不影响其他线程调用该实例的非同步方法,即非同步方法不受锁的限制
- 只能同步方法,而不能同步变量和类
- 线程睡眠不会施放任何锁
- 线程可以获得多个锁,如同个线程同步方法中调用另外一个对象的同步方法,这时就获取了两个对象的锁,需防止死锁
- 同步损害并发性,应该尽可能缩小同步范围
3.静态方法同步
- 静态同步方法,实际锁的对象是这个类的对象(XXX.class)
- 静态同步方法获取的是类对象的锁,所以一个线程获取后,其他线程只能等待获得锁后才能调用静态同步方法
- 对于静态、非静态的同步方法,获取的是不同对象的锁,可以被不同的线程同时调用
- 一个线程获得类的锁时,其他线程也不能调用该类的其他静态同步方法,会进入阻塞状态
- 静态同步方法和synchronized(类名.class)实际的效果是一样的
4.线程同步的阻塞
如果线程试图进入同步方法,而其锁已经被占用,则线程在该对象上被阻塞。
5.线程死锁
多个线程等待对方锁的情况,称为死锁。
如线程T1拥有对象O1的锁,同时又需要对象O2的锁,但O2的锁现在是属于线程T2的,而T2又需要获取O1的锁,这样就造成两个线程处于阻塞状态,都在等待对方释放需要的对象锁。
相关推荐
多线程注意:wait()方法的调用要有判定条件常用 while () obj.wait(timeout, nanos); ... // Perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的执行不会有规律了!
Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的...
Java多线程--同步机制解决线程安全问题方式二:同步方法
Java多线程--同步机制解决线程安全问题方式一:同步代码块
Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:...
Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的...
Java多线程--线程的安全问题与线程的同步机制介绍
【IT十八掌徐培成】Java基础第08天-03.多线程-同步代码块-同步方法.zip
java线程同步java线程同步java线程同步
Java多线程--避免同步机制带来的死锁问题及用Lock锁解决线程安全问题
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。本篇文章主要介绍了Java多线程-线程的同步与锁的问题,有兴趣的可以了解一下。
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...
【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java...
描述Java线程的同步与死锁,加深了解同步与死锁的问题
Java线程(二):线程同步synchronized和volatile 详细讲解Java 同步的原理技术资料
Java线程:线程的同步与锁 一、同步问题提出 二、同步和锁定 三、静态方法同步 四、如果线程不能不能获得锁会怎么样 五、何时需要同步 六、线程安全类 七、线程死锁 八、线程同步小结 Java线程:线程的交互...
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能