java基础
文章平均质量分 62
小树上的男爵
这个作者很懒,什么都没留下…
展开
-
CAS算法、自旋锁、悲观锁、乐观锁
文章目录AtomicInteger原理乐观锁和悲观锁AtomicInteger原理自旋锁+CAS算法CAS算法:有3个操作数(内存值V,旧的预期值A,要修改的值B)当旧的预期值A==内存值此时修改成功,将V改为B当旧的预期值A!=内存值此时修改失败,不做任何操作。并重新获取现在的最新值(这个重新获取的动作就是自旋)cas算法的实质就是在修改共享数据的时候,把原来的旧值记录下来了。如果现在内存中的值跟原来的旧值一样,证明没有其他线程操作过内存值,则修改成功。如果现在内存中的值跟原来的旧值不原创 2022-03-18 16:53:50 · 465 阅读 · 0 评论 -
Java中volatile关键字详解
文章目录背景从JVM的角度理解问题所在volatile关键字的作用与用法使用synchronized同步代码块实现相同功能背景假如有两人往同一个账户存钱,当其中一个人从账户中取走一部分时,另一方在不查看账户的情况下是不知道账户的金额有变动的,会认为账户中的金额并未发生变化,于是就有了这个问题(共享数据的变化不透明)从JVM的角度理解问题所在在jvm中,堆内存是唯一的,而栈内存并不唯一,每个线程都有自己的线程栈当一个线程(A)要获取共享变量的值时,会访问堆内存,拿到共享变量的值,然后将这个值存储到原创 2022-03-18 11:29:39 · 572 阅读 · 1 评论 -
Java线程池的理解与实现
文章目录基本原理使用Executors创建线程池使用步骤代码实现创建指定线程数量使用ThreadPoolExecutor创建线程池参数详解代码实现:任务拒绝策略基本原理和j2ee的连接池技术很像,都属于池化技术。在手写多个线程的过程中,经常会new好几个thread对象,也就是为线程对象申请资源,然后在线程运行完相应的代码后再释放资源这一过程只有两三个还好,而当高并发的情形下,很有可能有几百上千个线程需要频繁的创建、销毁。这就导致了非常严重的系统资源浪费。于是线程池技术应运而生,有一个容器一开始就装原创 2022-03-16 21:36:42 · 932 阅读 · 0 评论 -
Java中的Lock锁
文章目录背景知识具体用法背景知识在synchronized实现线程锁中,锁默认是开启的,当线程进入同步代码块/方法之后,锁自动关闭,当线程执行完同步代码块/方法后,锁又自己打开。这种方法使用简单,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象LockLock的实现提供比使用synchronized方法和语句可以获得更广泛的锁定操作Lock中提供了获得锁和释放锁的方法(手动完成,非自动)void lock():获得锁vo原创 2022-03-14 06:00:00 · 1000 阅读 · 0 评论 -
synchronized关键字的两种用法
文章目录用法一: 加到代码块上注意好处和弊端用法二:加到具体的方法上使用格式以及和加在代码块上用法的区别如何保证锁对象是相同的this同步静态方法的锁对象用法一: 加到代码块上注意在这种用法中,synchronized的括号里可以填入任意对象(作为锁对象),哪怕是一个最简单的object对象,但是当有多个需要访问同一代码块的线程时,这些线程的锁对象必须是一样的默认情况是打开的,只要有一个线程进去执行代码了,锁就会关闭当线程执行完出来了,锁才会自动打开好处和弊端好处:解决了多线程的数据安全问题原创 2022-03-13 19:22:17 · 464 阅读 · 0 评论 -
Java实现多线程的三种方法
继承Thread类的方式进行实现实现步骤定义一个类MyThread继承Thread类在MyThread类中重写run0方法public class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("thread is opened..." + i); }原创 2022-03-13 13:49:42 · 1813 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
https://www.cnblogs.com/dolphin0520/p/3920373.html转载 2022-03-05 16:35:34 · 87 阅读 · 0 评论