![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程笔记
文章平均质量分 73
Dlutzhangyi
一个正在研究docker和k8s的互联网底层码农
展开
-
java 单例模式与线程安全性问题
饿汉式饿汉式就是在变量申明的时候就完成初始化工作优点:没有线程安全性问题缺点:在程序加载时,单例模式的实体就已经被创建了,存在性能问题public class Singleton { // 私有化构造方法 private Singleton () {} private static Singleton instance = new Singleton(); public stat...原创 2018-04-15 21:19:40 · 533 阅读 · 0 评论 -
Java实现一个简易的数据连接池
Java实现一个简易的数据连接池下面给出了代码,设置数据连接池的初始大小INIT_CONNECTIONS=10,首先在静态代码块中加载驱动,在Datapool()函数中初始化数据连接池,getConnect()函数为返回数据连接池中的连接,若没有可用的,则等待。release()函数为将用完的连接返回给连接池。package com.concur.threadpool;import java....原创 2018-05-06 19:46:18 · 470 阅读 · 0 评论 -
使用wait()和notifyAll()实现生产者消费者模型
使用wait()和notifyAll()实现生产者消费者模型下面将实现三个类,Generater为生产者,Consumer为消费者,Taobao为中间平台。给出代码。生产者Generater:package generater_and_consumer;public class Generater implements Runnable{ private Taobao taobao;...原创 2018-04-24 19:27:51 · 253 阅读 · 0 评论 -
使用CountDownLatch实现一个简单的计数求和功能
使用CountDownLatch实现一个简单的计数求和功能使用CountDownLatch实现一个简单的计数求和功能,主要用到了两个函数,分别为countDown()和await()。下面给出了代码,readfile()函数用来读取文件中每行数字,并保存。calculate()函数用来计算每行的和,getfinalsum()用来计算最终的和。package com.concur.countdown...原创 2018-05-08 20:10:57 · 1073 阅读 · 0 评论 -
java 多线程 锁降级
锁降级指的是写锁降级为读锁。如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种并不能称之为锁降级,锁降级指的是把持住(当前拥有的)写锁,再获取到读锁,随后释放(先前有用的)写锁的过程。下面给出一个锁降级的示例,当数据变动时,isUpdate变量被设置为false,此时所有所有readwrite()方法的线程都能感知到变化,但是只有一个线程能够获取到写锁,其他线程会被阻塞在读锁和写锁的lock...原创 2018-04-19 21:44:22 · 2905 阅读 · 0 评论 -
java 使用AQS写可重入锁
java 使用AQS写可重入锁在上一篇文章中,手动实现了一个可重入锁,在本节中,使用AQS重写这个可重入锁MyLock2类,实现了Lock接口,定义内部类Sync继承自AbstractQueuedSynchronizer,并实现了两个方法,分别为tryAcquire(int arg)和tryRelease(int arg),tryAcquire函数的实现逻辑与上一篇文章"java 手动实现一个可重...原创 2018-04-18 20:13:29 · 727 阅读 · 0 评论 -
java 手动实现一个可重入锁
手动实现一个可重入锁下面代码给出了一个手动实现的可重入锁,MyLock类,实现了Lock接口,需要编写的两个函数为lock()和unlock()。isLocked变量用来判断当前是否有线程使用,若没有,则为false。lockBy变量保存了当前持有的线程。lockcount变量保存当前持有的线程的计数器。函数中调用wait()和notify()时,需要加上关键字synchronized。packa...原创 2018-04-17 16:13:34 · 1399 阅读 · 0 评论 -
Java原子类操作
Java原子类操作java的原子类放在java.util.concurrent.atomic包下面,常用的有以下这些类:AtomicBooleanAtomicIntegerAtomicIntegerArrayAtomicIntegerFieldUpdaterAtomicLongAtomicLongArrayAtomicLongFieldUpdaterAtomicReference下面将用代码来展示...原创 2018-04-16 21:29:06 · 167 阅读 · 0 评论 -
深入理解volatile原理与使用
深入理解volatile原理与使用Volatile称之为轻量级锁,被volatile修饰的变量,在线程之间是可见的,保证不了非原子性操作,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。有volatile变量修饰的共享变量在进行写操作的时候汇编代码中会出现Lock指令Lock指令在多核处理器下会引发两件事情:将当前处理器缓存行的内容写回到系统内存写回到内存的...原创 2018-04-16 19:10:12 · 139 阅读 · 0 评论 -
多线程笔记(1)
创建线程的多种方式1.实现Runnable接口demo1类实现了Runnable接口package com.concur.dlutzy;public class demo1 implements Runnable{ @Override public void run() { while(true){ System.out.p...原创 2018-04-10 21:34:14 · 118 阅读 · 0 评论 -
StampedLock实例
StampedLock是jdk8中新出现的一种改进的读写锁。下面代码给出StampedLock的使用实例,完成了四个函数功能,其中optimisticRead()是尝试使用乐观锁来读取值,conditionReadWrite()的功能是读取balance的值,并判断是否大于0,若大于0,则对balance更新。详细的源代码分析以后将会展示,关于api的介绍可参考StampedLock官方文档。pa...原创 2018-05-14 20:30:36 · 1186 阅读 · 0 评论