当多条语句(线程)在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致共享数据的错误。这样就是线程的安全问题。 解决线程安全的方式有两种: 1.synchronized同步机制 2.Lock锁 一、synchronized同步机制 1.同步代码块 ...
分类:
编程语言 时间:
2020-02-29 17:29:51
阅读次数:
83
wait():将线程进入阻塞状态,需要等待唤醒,此时释放cpu资源 notify():程序一旦执行到此方法,就会唤醒一个被wait的线程 notifyAll():程序一旦执行到此方法,就会唤醒被wait的线程 注意:这三个方法只能用在同步方法或同步代码块中 这三个方法的调用者必须是同步监视器,否则会 ...
分类:
编程语言 时间:
2020-02-28 19:08:24
阅读次数:
67
1 使用对象区别 sleep的调用者是Thread,wait的调用者是所有实例对象 2 使用位置的区别 sleep在任何位置都能使用,而wait/notify/notifyAll需要在"synchronized"同步代码块中使用(wait需要一个监视器monitor) 3 是否释放资源 wait方法 ...
分类:
其他好文 时间:
2020-02-16 13:24:37
阅读次数:
73
锁消除和锁粗化案例分析 锁消除 直接上代码 上述是一个简单的同步代码块的案例,在并发的情况下多个线程是共享MySynchronizedTest07 的成员变量 object所以才达到了锁的效果。 我们再看下面一个案例代码: 上述代码我们可知将object变成了局部变量,在方法中,方法的的局部变量时线 ...
分类:
其他好文 时间:
2020-02-11 15:55:58
阅读次数:
295
"前言" "同步代码块和同步方法" "锁对象和 Mark Word" "重量级锁" "轻量级锁" "偏向锁" "使用场景" "结语" "参考链接" 前言 最开始听到偏向锁、轻量级锁和重量级锁的概念的时候,我还以为是 中提供了相应的类库来实现的,结果了解后才发现, 这三个原来是虚拟机底层对 代码块的不 ...
分类:
编程语言 时间:
2020-02-09 16:40:30
阅读次数:
81
同步方法,仍然后有线程锁. 1 对于非静态方法,线程锁(同步监视器)是this 2 对于静态方法,线程锁是该类. package com.LearnJava.Thread; /* 同步代码块 synchronized(同步监视器){ //需要同步的代码 } 同步监视器:俗称 锁,可以是任何实例化的类 ...
分类:
编程语言 时间:
2020-02-08 15:19:46
阅读次数:
64
package com.LearnJava.Thread; /* 同步代码块 synchronized(同步监视器){ //需要同步的代码 } 同步监视器:俗称 锁,可以是任何实例化的类.但是需要共用同一个实例. */ class WindowSell implements Runnable{ Ob ...
分类:
编程语言 时间:
2020-02-08 13:55:40
阅读次数:
64
synchronized从语法的维度一共有3个用法: 1、静态方法加上关键字 2、实例方法(也就是普通方法)加上关键字 3、方法中使用同步代码块 前两种方式最为偷懒,第三种方式比前两种性能要好。 synchronized从锁的是谁的维度一共有两种情况: 锁住类 锁住对象实例 1)静态方法上的锁 静态 ...
分类:
其他好文 时间:
2020-02-06 20:20:06
阅读次数:
77
1 sleep 在哪里都可以用 调用Thread.sleep()但是 wait方法只能在同步方法和同步代码块中使用 wait也就是使得该线程成为阻塞状态(注意这里阻塞不是书本操作系统下的while循环实现的...我TM学傻了,这里阻塞特点1. 不耗cpu的等待;2. 线程安全;) 2.notify( ...
分类:
其他好文 时间:
2020-02-01 14:33:46
阅读次数:
87