
Java并发编程
超轶绝尘
5年java Web 项目开发经验
展开
-
Java多线程并发笔记03 synchronized减小锁粒度,优化代码执行时间
示例代码1:可以对任意Object对象进行加锁public class ObjectLock { public void method1(){ synchronized (this) {//对象锁 try { System.out.println("method1......"); Thread.sleep(2000); } catch (Inter...原创 2018-08-15 07:55:12 · 906 阅读 · 0 评论 -
Java多线程并发笔记02 synchronized锁重入 & 出异常时锁释放
概念: 关键字 synchronized拥有锁重入的功能,也就是使用 synchronized时,当一个线程得到一个对象的锁后,再次请求此对象时,可以再次得到此对象的锁。适用场景: 将一个大的业务逻辑拆成多个子方法逐个调用,若每个方法都是同步(synchronized)的,那么对象锁就会一直传递下去,被当前线程一直持有,若是其中又一个方法没有同步,则变成异步的了,放弃了对象锁...原创 2018-08-12 21:40:14 · 1043 阅读 · 0 评论 -
Java多线程并发笔记01 对象锁 & 类锁 & 对象锁的同步和异步 & 脏读
例子程序01:对象锁/** * 多线程同时修改同一对象的成员变量,保持修改的原子性 * @author 超轶绝尘 * */public class MyThread extends Thread { private int count = 5; //synchronized给当前对象加锁 @Override public synchronized void run(...原创 2018-08-12 21:38:18 · 248 阅读 · 0 评论 -
Java多线程并发笔记03 volatile Automatic
示例程序01public class RunThread extends Thread { //若属性不设置为volatile类型,那么每个方法体在执行的时候都会将成员变量从咱栈空间copy一份到堆空间的方法体内 //在方法体内操作的是实际是这个变量的副本,而不是栈空间的里的那个变量。 //加上了volatile变量后,那么变量就对各个线程是可见的了 private volati...原创 2018-08-12 21:46:03 · 1711 阅读 · 0 评论 -
Java多线程并发笔记04 改变lock 对象、死锁、锁的种类
示例程序1.线程中改变lock 对象/** * 锁对象改变的问题 * 变了就没用了 * */public class ChangeLock { /** * 锁对象变了,那么锁就没有用了,但若是锁对象的属性变了则是不影响锁的效用 */ private String lock = "lock"; /** * 加同步锁的目的就是要保证原子性,即一个线程执行此方法体开始...原创 2018-08-13 18:56:16 · 488 阅读 · 0 评论 -
Java多线程并发笔记05 volitile、Automotic wait、notify模拟队列
示例程序1:volatile List 属性多线程操作import java.util.ArrayList;import java.util.List;/** * 使用volatile关键字使得多个线程操作同一个 * 2个线程, * 一个线程不断往集合里添加元素 * 一个线程监听集合的元素个数 * 当个数等于某个数值时停止此线程 * while(true)监听,...原创 2018-08-13 20:00:11 · 340 阅读 · 0 评论 -
Java并发编程笔记06 线程安全的单例
/*内部类实现单例,线程安全*/public class Singleton { private Singleton() {} private static class InnerSingleton { private static Singleton sg = new Singleton(); } public static Singleton getInstance...原创 2018-08-13 20:05:19 · 170 阅读 · 0 评论