java中与锁有关的几个概念:可重入锁、读写锁、可中断所、公平锁 可重入锁 synchronized和ReentrantLock都属于可重入锁,当前加锁的程序调用了一个持有当前锁对象的子程序不会发生阻塞,代码如下 执行method1()方法,获取锁,然后又调用同步方法method2(),这个时候线程 ...
分类:
其他好文 时间:
2019-04-28 19:02:49
阅读次数:
162
第一个程序代码 第二个程序代码,特殊的在获取锁对象后不需要初始化,因为在第一个进程内已经初始化了 ...
分类:
系统相关 时间:
2019-04-28 18:42:05
阅读次数:
201
偏向锁 偏向锁也是JDK 1.6中引入的一项锁优化,它的目的是消除数据在无竞争情况下的同步原语,进一步提高程序的运行性能。如果说轻量级锁是在无竞争的情况下使用CAS操作去消除同步使用的互斥量,那偏向锁就是在无竞争的情况下把整个同步都消除掉,连CAS操作都不做了。 当锁对象第一次被线程获取的时候,虚拟 ...
分类:
其他好文 时间:
2019-04-09 20:22:27
阅读次数:
132
其中,多个线程必须使用的是同一个锁对象; 等待 wait 和唤醒 notify 的也就是这个对象监视器及锁对象的正在等待的单个线程,若多个,谁等的时间长唤醒谁; 代码实现: 从顾客消费者来买包子开始: 使用的是线程类Thread类的匿名内部类的匿名对象方式创建线程; 同步代码块的方式实现线程同步即解 ...
分类:
其他好文 时间:
2019-04-07 22:13:49
阅读次数:
249
线程间通信——等待唤醒机制,避免争夺同一资源; 锁对象可以是任意Object类的子类对象; 包子案例: 包子案例——生产者和消费者: 代码实现: 关键就是在于两个线程使用同一个锁对象! 这边是主程序调用这两个线程时候传入的同一个对象! 包子铺线程类——生产者: 其中,baozi类作为成员变量,并且重 ...
分类:
编程语言 时间:
2019-04-07 20:28:55
阅读次数:
152
线程安全 Synchronized 线程同步(线程安全处理) 线程同步的两种方法: 1:同步代码块 2:同步方法 同步代码块: synchronized (锁对象) { 可能会产生线程安全问题的代码 } 同步代码块中的锁对象可以是任意的对象;但多个线程时,要使用同一个锁对象才能够保证线程安全。 同步 ...
分类:
编程语言 时间:
2019-03-31 19:31:12
阅读次数:
182
/*资源类 */class BaoZi { String pi; String xian; boolean flag=false;} /*同步线程保证2个线程只有有一个执行(互斥),锁对象必须保证唯一,可以使用资源对象作为锁对象 */class BaoZipu extends Thread{ pri ...
分类:
编程语言 时间:
2019-03-29 00:55:47
阅读次数:
185
JMM结构图: JMM对同步的8种操作: JMM的同步规则: Countdownlatch介绍: 该类功能是可以阻塞线程,并在保证线程满足特定条件下,继续执行。如上图,Countdownlatch的cnt初始值是3,线程A调用await()方法,会阻塞,t1,t2,t3每次执行会将cnt-1,然后继 ...
分类:
其他好文 时间:
2019-03-25 01:22:03
阅读次数:
297
多条线程抢夺同一资源时,经常需要加锁,保证同一时间只能有一条线程操作一个资源。 同步锁就是互斥锁 格式:@synchronized (token) { } token:锁对象,要使用全局的对象,建议使用self {} 要加锁的代码段 注意点:加多把锁是无效的。 要注意加锁的位置。 互斥锁的优点: 能 ...
分类:
编程语言 时间:
2019-02-16 00:00:31
阅读次数:
279
当某个线程请求一个由其它线程持有的锁时,该线程就会进入等待或者阻塞状态,一直到持有锁的线程释放锁,然后再去竞争获取锁。然而,内置锁(即Synchronized修饰的锁对象)是可重入的,因此如果某个线程试图获得一个已经由它自己持有的锁,那么它会成功获得此锁,这就是所谓的重入锁,也可以理解为锁的重入。 ...
分类:
编程语言 时间:
2019-01-27 19:29:55
阅读次数:
235