java多线程
文章平均质量分 81
对java对线程系统化的进行总结
define_us
互联网编程/架构设计/数学崇拜
展开
-
java中的协程Quasar
HELLOWORLDpublic class Helloworld { @Suspendable static void m1() throws InterruptedException, SuspendExecution { String m = "m1"; //System.out.println("m1 begin"); m = m2(); //System.out.println("m1 end");原创 2022-01-10 23:55:18 · 324 阅读 · 0 评论 -
RxJava
Observable简单而言是一个观察者模式(当一个对象被修改时,则会自动通知依赖它的对象)原创 2021-12-23 00:36:45 · 1152 阅读 · 0 评论 -
Lindorm:一种Hbase的改进
9月18日云栖大会,阿里云推出业内首款云原生多模数据库Lindorm,同时提供宽表引擎、时序引擎、搜索引擎和文件引擎,重新定义万物互联时代多类型数据的存储方式。Lindorm可同时满足key-value数据、宽表数据、时序数据、文件、图片等多种类型数据的存储、实时查询和检索需求,解决分别部署不同类型数据库带来的架构复杂维护困难、数据存储成本高、难以应对业务规模灵活多变等问题,海量数据存储成本降低80%,是互联网、IoT、车联网、广告、社交、游戏等场景的首选。大家使用HBASE都会有如下痛点宕机恢复时间原创 2020-12-26 15:33:12 · 1588 阅读 · 1 评论 -
ReentrantReadWriteLock的详解
概述内部包含一个内部类Sync,FairSync和NonfairSync都是继承自Sync。ReentrantReadWriteLock根据构造函数的不同,有公平锁和非公平锁两种形式。提供下面两种方法分别返回一个写锁和一个读锁。 public ReentrantReadWriteLock.WriteLock writeLock() { return writerLock; } public ReentrantReadWriteLock.ReadLock readLock() { re原创 2020-12-07 17:07:51 · 139 阅读 · 0 评论 -
JUC实战之利用JUC解决问题
题目1 使用3个线程循环打印10遍ABC方案一 public static void main(String[] args) { Maj maj = new Maj(); Thread a = new Thread(new ThreadABC(maj,"A")); Thread b = new Thread(new ThreadABC(maj,"B")); Thread c = new Thread(new ThreadABC原创 2020-12-04 19:57:56 · 541 阅读 · 0 评论 -
JUC___LockSupport类
LockSupport是对Unsafe的一些封装。下面对一些常见方法进行解释。主要提供线程的park和unpark方法。 /** * Disables the current thread for thread scheduling purposes unless the * permit is available. * * <p>If ...原创 2018-12-06 11:30:16 · 160 阅读 · 0 评论 -
JUC之AQS第二部分:共享锁部分
AQS有两种模式,一种是独占模式,一种是共享模式。这篇文章是关于共享模式的原理。当线程调用acquireShared()申请获取锁资源时,如果成功,则进入临界区。当获取锁失败时,则创建一个共享类型的节点并进入一个FIFO等待队列,然后被挂起等待唤醒。当队列中的等待线程被唤醒以后就重新尝试获取锁资源,如果成功则唤醒后面还在等待的共享节点并把该唤醒事件传递下去,即会依次唤醒在该节点后面的所有...原创 2018-06-26 19:30:00 · 202 阅读 · 0 评论 -
JUC之线程池
创建线程池由工厂类Executors完成。其中newCachedThreadPool,newFixedThreadPool,newSingleThreadExecutor对应的实现类是ThreadPoolExecutor,newScheduledThreadPool对应的实现类是ScheduledThreadPoolExecutor。ThreadPoolExecutorint cor...原创 2018-06-26 17:14:14 · 211 阅读 · 0 评论 -
JUC之各种锁的使用:CountDownLatch,CyclicBarrier,ReadWriteLock,Semaphore
CountDownLatchCountDownLatch的典型使用环境是:确保某个操作在其需要的一个多线程操作完成后执行。比如说赛跑者必须等发令枪响。await是阻塞,countDown是倒计,构造函数中指定初始值。只有初始值被countDown到0时,阻塞才会被打开。 //所有线程阻塞,然后统一开始 CountDownLatch begin = new...原创 2018-06-26 10:44:41 · 400 阅读 · 0 评论 -
JUC中多线程的集合——ArrayBlockingQueue和LinkedBlockingQueue和DelayedWorkQueue
LinkedBlockingQueue在JDK中,LinkedList或ArrayList就是队列。但是实际使用者并不多。原创 2018-05-07 10:20:06 · 405 阅读 · 0 评论 -
java多线程JUC之Callable和Future
Callable任务返回Future对象。Callable和runnable的区别在于其有返回值并可以向上抛出异常。runable线程产生的异常,要么在其内部解决,要么导致线程完蛋。注意,你不能利用Callable向线程传递参数。常规的办法是在构造Callable对象时进行传入。package com.zyf.Future;import java.util.concurrent.Callab...原创 2019-01-23 16:59:58 · 280 阅读 · 0 评论 -
JAVA多线程容器——Vector
Vector被认为是一个失败之作。但是其代码仍然还有很多可以学习的地方。内部包含了许多早期JAVA开发者非常朴素的思想。所有操作内部状态的方法都被加锁,并修改modCount public synchronized E remove(int index) { modCount++; if (index >= elementCount) ...原创 2019-01-23 16:37:46 · 359 阅读 · 0 评论 -
用JAVA进行优雅的多线程并发编程
在编程中,我们必须要假设一点,就是其他程序员会以各种稀奇古怪的方式来使用我们编写的类。不暴露一切不需要暴露的字段。向外界提供本对象所引用的内部对象的引用时一定要小心。必要的话克隆一份(保护性副本)给他而不是直接给出引用。使用工厂方法而非构造函数来初始化对象。防止this引用在构造过程中逸出。新手程序员常犯的一个错误就是在构造函数里完成一堆事情而且也不注意先后顺序。会导致构造函数没有完...原创 2018-12-06 22:02:16 · 744 阅读 · 0 评论 -
并发和多线程的编程的锁——漫谈
如果计算机只用来做一件事情,或者一件事情做完后再开始做第二件事情。那么根本不需要考虑什么并发。但是想象以下,我们的程序一定充斥着各种轮训(这就是我们大学时学的单片机,比如一会去检查下通讯就绪没有,一会又回去检查看门狗)。这无疑有一个基本要求,就是编程人员,哪怕是简简单单的一个业务,也必须熟悉计算机从硬件底层开始的所有知识,才能保证其可以正确处理各项操作的时序)。另外一方面,一旦我们有一个cpu负载...原创 2018-12-06 16:38:11 · 307 阅读 · 0 评论 -
linux中的线程
参考文献https://www.zhihu.com/question/25367227基本概念首先Linux并不存在真正的线程,Linux的线程是使用进程模拟的。 从内核来讲,并没有线程的概念,linux把线程当做进程来实现。内核并没有特殊的调度算法或者定义特别的数据结构来表征线程。线程仅被看做一个与其它进程共享某些资源的进程。每个线程都拥有唯一属于自己的task_struct,所以...原创 2018-08-23 16:11:19 · 273 阅读 · 0 评论 -
JUC中多线程的集合——ConcurrentHashMap
部分摘自http://www.importnew.com/22007.html https://www.cnblogs.com/everSeeker/p/5601861.html一些过时的知识ConcurrentHashMap是一个代码超过6000行的类。绝对跟简单无缘。也绝对不是一片博客能讲的清楚的。下面使一些过时的知识: ConcurrentHashMap采用了分段锁的...原创 2018-06-22 14:31:17 · 229 阅读 · 0 评论 -
JAVA集合类深入的HashMap
首先,我们看看如何放进元素 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }hash算法如下,就是调用对象自己的hashcode。 static final int hash(Object key) { int...原创 2018-04-29 20:53:22 · 130 阅读 · 0 评论 -
JVM内部的线程
原文地址:http://club.alibabatech.org/article_detail.htm?articleId=4 有个人整理。 + Attach Listener Attach Listener线程是负责接收到外部的命令,而对该命令进行执行的并且吧结果返回给发送者。通常我们会用一些命令去要求jvm给我们一些反馈信息, 如:java -version、jmap、jstack等等。如...转载 2018-04-18 11:25:26 · 729 阅读 · 0 评论 -
JUC的AQS的第三部分:AQS(AbstractQueuedSynchronizer)代码详解
概念安全点:线程可以暂停的地方。理论上,任何一条字节码的边界都可以暂停。但是JVM不会这么做。因为代码抵达每一个安全点后,都会询问需不需要暂停,这将消耗巨大的性能损失。AbstractQueuedSynchronizer在JUC的locks包中。 acquire()操作流程...原创 2018-03-09 10:40:43 · 316 阅读 · 0 评论 -
java多线程(7):JUC之locks包
参考文献https://www.cnblogs.com/aishangJava/p/6555291.htmlLock接口public interface Lock { //Lock方法用于主动获取锁。但是也必须手动释放锁。直到拿到锁方法才返回。 //在等待获取锁的过程中休眠并禁止一切线程调度 void lock(); //可以响应中断,从而中断等待获...原创 2018-03-09 10:28:57 · 287 阅读 · 0 评论 -
JAVA多线程(6): JUC之CopyOnWrite
CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不...原创 2018-03-08 17:20:27 · 168 阅读 · 0 评论 -
java多线程(3):JUC中的atomic包
AtomicInteger,AtomicLong、AtomicBoolean以AtomicInteger为例。下面的代码操作count是线程安全的。public class Sample { private static AtomicInteger count = new AtomicInteger(0); public static void increment() ...原创 2018-03-08 17:13:20 · 223 阅读 · 0 评论 -
java多线程(5):object类
Object和多线程有关的方法有三个,wait,notify和notifyall。为什么这些方法要出现在Object类里呢?因为这些方法实际上是和锁相关。锁的改变可以引起线程状态的改变。而设计上的时候,本来就计划着锁可以加在任何对象上。但你们都不这么用。这点和C/C++的利用操作系统信号量构建锁不同。WAIT当线程调用wait,它会释放monitor,并进入等待区。java中每个对象都有唯...原创 2018-03-07 15:08:12 · 198 阅读 · 0 评论 -
JAVA多线程:Thread类和他们的朋友们
多线程框架上图中的红线代表相关的关系。 这个极为丑陋的图希望大家能对java构建多线程又一个总体的认识,至少要看懂以下三点:Java多线程的根是Thread类的native start0方法,任何实现都不可能绕开这一点。为了调用这个方法,最原生的做法就是继承thread类,或者实现runable接口,然后用runable对象初始化一个thread对象。在底层,start0方法会使用...原创 2018-03-07 13:54:40 · 175 阅读 · 0 评论 -
java多线程(3):JUC基础概述
几个基本概念volatile,不保证原子性,只保证可见性,也就说不能保证线程安全。 如果是一写多读,那么jvm可以解决同步问题。但是,如果是多写,则线程并非安全。 实现原理是禁止指令重排序,并强制线程从主存储器获取数据。具体实现原理是在该数据发生更改时,线程会立刻将其写回主存。其他cpu都在嗅探主存储器写总线,当发现自己持有的缓存被修改时,对自己的缓存做无效处理,在下次访问时直接从主存储器...原创 2017-11-13 19:48:20 · 407 阅读 · 0 评论 -
java多线程——Monitor机制和synchronized关键字
synchronized的用法指定加锁对象:对给定对象加锁,进入同步代码前需要活的给定对象的锁。 直接作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得当前实例的锁。 直接作用于静态方法:相当于对当前类加锁,进入同步代码前要获得当前类(当前类内部的class对象)的锁。内部原理Synchronized在古老的年代被成为重量级锁。但是java1.6对其进行了优化。为了减少...原创 2017-11-13 19:03:35 · 587 阅读 · 1 评论 -
java基础教程11:线程和线程间的同步
零、实现多线程的两种方式 (1)继承thread 下面几乎所有例子都采用这种办法 (2)实现runnable接口(比如说该类已经继承了其他类)package Pack1;public class MyThread implements Runnable{ private String name; private int i; public MyThread(Strin原创 2016-07-09 21:20:14 · 390 阅读 · 0 评论