多线程高并发
切克脑
这个作者很懒,什么都没留下…
展开
-
Thread.currentThread()和this的区别
通过一个isAlive函数来验证第一个例子:public class MyThread extends Thread { public MyThread(){ System.out.println("------" + "构造函数开始" + "------"); System.out.println("T...原创 2019-06-07 09:28:25 · 134 阅读 · 0 评论 -
compareAndSet函数
boolean compareAndSet(V expectedReference,V newReference)expectedReference-->期望引用newReference--》更新后的引用两个值相同返回值为true---------------------public boolean compareAndSet(VexpectedReference...原创 2019-07-25 14:10:20 · 736 阅读 · 0 评论 -
Volatile为什么不能保证原子性
Volatile只能保证可以从主内存中获取到最新的值,当执行一个num+=1;的时候,可以划分为3步,num=1某一个线程可以在中间的某部获取到num的值,存在线程安全。...原创 2019-07-22 08:24:53 · 84 阅读 · 0 评论 -
volatile写和volatile读的内存语义
1.线程A写一个volatile变量,实质上是线程A向接下来将要读这个volatile变量的某个线程发出了消息2.线程B读一个volatile变量,实质上是线程B接受了之前某个线程发出的消息3.线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息...转载 2019-07-25 23:17:41 · 381 阅读 · 0 评论 -
wait()和notify()锁是否自动释放问题
当方法wait()被执行后,锁自动释放,但是执行完notify后,锁不是自动释放的,必须等到所在的同步快全部执行完成之后才能运行其他的。原创 2019-07-22 10:26:54 · 948 阅读 · 0 评论 -
公平锁和非公平锁的内存语义
1.公平锁和非公平锁释放时,最后都要写一个volatile变量state2.公平锁获取的时候,首先会去读volatile变量3.非公平锁获取时,首先会利用CAS更新volatile变量,这个操作同时具有volatile读和volatile写的内存含义...原创 2019-07-26 09:44:38 · 172 阅读 · 0 评论 -
公平锁和非公平锁的内存含义
1.公平锁和非公平锁释放时,最后都要写一个volatile变量state2.公平锁获取的时候,首先会去读volatile变量3.非公平锁获取时,首先会利用CAS更新volatile变量,这个操作同时具有volatile读和volatile写的内存含义...原创 2019-07-26 09:45:21 · 117 阅读 · 0 评论 -
Condition的实现等待/通知与synchronized的类比
Object类中的wait()方法相当于Condition中的await()方法Object类中的wait(long) 相当于Condition中的await(long,TimeUnit)Object类中的notify()相当于Condition中的signal()Object类中的notifyAll相当于Condition中的signalAll()...原创 2019-07-23 15:41:35 · 98 阅读 · 0 评论 -
Java并发编程之基于线程池技术的简单Web服务器
转载的:https://blog.csdn.net/jisuanjiguoba/article/details/80548045转载 2019-07-27 23:33:17 · 149 阅读 · 0 评论 -
CAS实现计数器
package q4;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;public class Counter { private AtomicInteger atomicInteger=new AtomicInteger(0); p...原创 2019-07-25 11:31:04 · 401 阅读 · 0 评论 -
CAS
CAS操作需要两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有变化,如果没有发生变化,才交换新值,如果发生变化,则不变...原创 2019-07-25 10:18:49 · 72 阅读 · 0 评论 -
Synchronized(非this对象)
如果这个对象使用的不是同一个对象监听器,异步调用。如果这个对象使用的是同一个对象监听器,同步调用public class service { private String usernameParam; private String passwordParam; private String anyString=new String(); public void set...原创 2019-07-20 20:15:15 · 336 阅读 · 0 评论 -
关于lock的一些函数记录
int getHoldCount():查询当前线程保持此锁定的个数,也就是调用lock()方法的次数int getQueueLength()返回正等待获取此锁定线程估计数,比如有5个线程,1个线程首先执行了await()方法,那么在调用次函数返回值为4,int getWaitQueueLength(Condition condition)作用是返回等待与此锁定相关的给定条件Conditi...原创 2019-07-23 22:07:11 · 417 阅读 · 0 评论 -
ReentrantReadWriteLock类读写问题总结
lock.readLock().lock()lock.writeLock().lock()读写,写读,写写都是互斥的,读读是异步的,非互斥的原创 2019-07-23 22:38:24 · 101 阅读 · 0 评论 -
懒汉模式(DCL双检查锁机制)
public class MyObject { private volatile static MyObject myObject; private MyObject() { } public static MyObject getInstance() { try { if (myObject!=null) { }else { Thre...原创 2019-07-24 13:53:48 · 462 阅读 · 0 评论 -
饿汉模式/立即加载
public class MyObject { private static MyObject myObject=new MyObject(); private MyObject() { } public static MyObject getInstance() { return myObject; }}public class MyThread extend...原创 2019-07-24 13:56:43 · 239 阅读 · 0 评论 -
synchronized实现同步的3种形式
对于普通同步方法,锁 是当前实例对象对于静态同步方法,锁是当前类的class对象对于同步代码块,锁是synchronized括号里面配置的对象原创 2019-07-25 09:20:34 · 206 阅读 · 1 评论 -
synchronized在jvm的实现原理
jvm基于进入和退出Monitor对象来实现方法同步和代码块同步,但是两者的实现方式不同,代码块同步是使用monitorenter和monitorexit指令实现的,而方法同步是使用另一种方法实现。但是方法同步同样可以用这两个指令来实现。monitorenter指令是编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处或者异常处,jvm保证每一个monitoren...原创 2019-07-25 09:27:09 · 363 阅读 · 0 评论 -
一个类中存在一个synchronized修饰的方法和一个普通的方法,不同线程同时访问这两个方法,会出现什么情况? 如果这两个方法都是同步方法又会出现什么现象?
一个类中存在一个synchronized修饰的方法和一个普通的方法,不同线程同时访问这两个方法,会出现什么情况?如果这两个方法都是同步方法又会出现什么现象?--摘自《java多线程编程核心技术》61页总结:一个线程持有对象锁,另一个线程可以以异步的方式调用对象里面的非synchronized方法,输出结果是不按照顺序的一个线程持有对象锁,另一个线程可以以同步的方式调用对象里面的sy...原创 2019-07-20 20:07:19 · 545 阅读 · 0 评论 -
Synchronized可重入性解释
Synchronized可重入性解释:自己可以再次获取自己的内部锁。Public class Service{Synchronized public void service1(){System.out.println(“service1”);Service2();}Synchronized public void service2(){System.out.println...原创 2019-07-20 20:11:10 · 504 阅读 · 0 评论 -
实验证明不在synchronized块中就是异步执行,在synchronized就是同步执行
实验证明不在synchronized块中就是异步执行,在synchronized就是同步执行public class Task { public void doLongTimeTask() { for(int i=0;i<100;i++) { System.out.println("nosynchronized threadName="+Thread.currentT...原创 2019-07-20 20:13:18 · 221 阅读 · 0 评论 -
什么是AQS?
队列同步器(AbstractQueuedSynchronizer)是用来构建锁和其他同步组件的基础框架,他使用一个int成员变量表示同步状态,通过内置的FIFO来完成资源获取线程的排队工作。同步器使用的主要方法是继承,子类通过继承同步器并实现他的抽象方法来管理状态,在此过程中避免不了状态的改变:getState(),setState(int newState),和compareAndSet...原创 2019-07-28 08:55:02 · 940 阅读 · 0 评论