CAS

4.1 ConditionObject

喜夏-厌秋 提交于 2020-08-12 14:18:57
在这个类里AbstractQueuedSynchronizer public class ConditionObject implements Condition, java.io.Serializable {} 属性 就这俩没有了 /** First node of condition queue. */ private transient Node firstWaiter; /** Last node of condition queue. */ private transient Node lastWaiter; newCondition private final Condition notFull = putLock.newCondition(); public Condition newCondition() { return sync.newCondition(); } final ConditionObject newCondition() { return new ConditionObject(); } //毛也没有啊 public ConditionObject() { } public boolean offer(E e, long timeout, TimeUnit unit){ ... //在这里有这么一句 当容量到达上限 就调用了await while

泰格医药港股上市,阿诺医药获1亿美元融资,Acutus登陆纳斯达克 | 医疗健康行业投融资及医药要闻速览

孤街醉人 提交于 2020-08-12 14:17:58
   一周要闻:   开创 “鸡尾酒疗法” 治疗肿瘤范式,阿诺医药完成 1 亿美元融资   临床 CRO 领军者泰格医药成功登陆港交所   大涨 60%! Acutus Medical 成功登陆纳斯达克   武田中国安适利 (注射用维布妥昔单抗)在中国上市    国内投融资、大事件       1. 阿诺医药完成近 1 亿美元 C 轮融资,提出 “鸡尾酒疗法” 治疗肿瘤范式   近日,阿诺医药宣布已经完成了 1 亿美元左右的 C 轮融资,并有可能将在今年 8 月开启 IPO 进程。其官网信息显示,阿诺医药是一家临床阶段的全球性生物制药公司,主要开发肿瘤免疫治疗药物。目前,阿诺医药已经布局了若干个研发管线,其中 3 个项目(溶瘤病毒 AN1004、EP4 拮抗剂 AN0025、PI3K 抑制剂 AN2025)已经进入临床阶段。阿诺医药成立于 2004 年,是一家临床阶段的全球性生物制药公司, 针对癌症治疗,公司提出了“鸡尾酒疗法”,试图将肿瘤变成一种可控的、非致命性的疾病。    2. 基因疗法初创 Exegenesis Bio 获数千万美元 B 轮融资   8 月 3 日,基因疗法公司 Exegenesis Bio 宣布已完成数千万美元的 B 轮融资,此轮融资由君联资本领投,博远资本和泰福资本跟投,老股东险峰旗云和凯泰资本持续加注,浩悦资本担任本轮融资的独家财务 顾问

2020Java面试题及答案,命中率高达90%

▼魔方 西西 提交于 2020-08-12 07:33:34
这份资源我自己历经三年才整理归类出来,现在免费分享给大家; 面试题有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合。 面试题以及答案,已经整理成PDF电子书形式打包在网盘; 面试题领取微信扫一扫,加好友请备注“博客园面试题”; 目录 上海-携程-Java高级面试题.pdf 北京-百度-Java中级面试题.pdf 深圳-乐信-Java高级面试题.pdf 深圳-腾讯-Java高级面试题.pdf 上海-拼多多-Java高级面试题.pdf 深圳-OPPO-Java高级面试题.pdf 上海-拼多多-Java高级面试题.pdf 北京-京东-Java实习生面试题.pdf 北京-京东-Java实习生面试题.pdf 杭州-阿里云Java实习生面试题.pdf 南京-软通动力-Java初级面试题.pdf 深圳-银盛支付-Java中级面试题.pdf 深圳-中国平安-Java中级面试题.pdf 深圳-蚂蚁金服-Java高级面试题.pdf 深圳-丰巢科技-Java高级面试题.pdf 深圳-商汤科技-Java高级面试题.pdf 厦门-中软国际-Java初级面试题.pdf 杭州-蚂蚁金服-Java高级面试题.pdf 杭州-蚂蚁金服-资深工程师面试题.pdf 广州唯品会-Java大数据开发工程师面试题.pdf 上海-携程

硬件对同步的支持-TAS和CAS指令

吃可爱长大的小学妹 提交于 2020-08-12 06:28:37
目录 Test and Set Compare and Swap 使用CAS实现线程安全的数据结构。 现在主流的多处理器架构都在硬件水平上提供了对并发同步的支持。 今天我们讨论两个很重要的硬件同步指令:Test-and-Set和Compare-and-Swap Test and Set 一个Test-and-Set(TAS)指令包括两个子步骤, 把给定的内存地址设置为1,然后返回之前的旧值。 这两个子步骤在硬件上实现为一个 原子操作 ,执行期间不会被其他处理器打断。 (一个CPU可以使用诸如Dual-port RAM电子原件提供的TAS指令,此外,CPU自身也可以提供CAS指令) 值得注意的是,TAS指令是在1位(bit)上实现,这限制了变量非0即1,不会有其他值,并且TAS总是把变量设置为1。 可见,TAS生而为自旋锁,下面是使用TAS实现自旋锁的伪代码[2]: lock = 0 //shared state while(test_and_set(lock)==0){ //try lock //do nothing } // 临界区代码 lock = 0 //release 当第一个线程执行这段代码时,TAS指令会立即把lock设置为1,并返回0 ,线程退出while循环进入临界区。 如果另一个线程尝试进入临界区,TAS会把lock设置为1,但是也会返回1

99 道 Java 多线程面试题,看完我跪了!

孤人 提交于 2020-08-12 05:52:47
今天给大家更新的是一篇关于多线程面试的文章,是根据时下热门的面试内容给大家进行总结的,如有雷同,请多见谅。 本篇文章属于干货内容!请各位读者朋友一定要坚持读到最后,完整阅读本文后相信你对多线程会有不一样感悟,下次面试和面试官也能杠一杠相关内容了。 1.什么是进程? 进程是系统中正在运行的一个程序,程序一旦运行就是进程。 进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。 2.什么是线程? 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 3.线程的实现方式? 1.继承Thread类 2.实现Runnable接口 3.使用Callable和Future 4.Thread 类中的start() 和 run() 方法有什么区别? 1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。然后通过此Thread类调用方法run(

一个Java对象的回忆录:那些被锁住的日子

孤者浪人 提交于 2020-08-12 02:53:28
偏向锁 “喂,别动啊,让我检查下你的lock位状态”,不知什么时候我竟然又睡着了,睁开眼睛,一位线程大哥正蹲在我的旁边,摸着我头上的MarkWord。 “lock位是01,不错不错,让我再看看偏向锁标记位,哇,是1,太棒了,支持偏向锁!最后再看看thread位,是0!awesome!看来我来的比较早,还没人跟我抢”,这位线程大哥嘴里一直念叨,我也不知道他在说些什么。 “来,把你的MarkWord给我,我给你一个新的“,线程大哥手里握着一个64bit的数字,一边说,一边准备来把我头上的MarkWord换掉。 这个时候,我想起小A曾经给我说的话,一下子躲开了,“你要干嘛”,我紧张的问到。 “小朋友别紧张,我是3001号线程,执行到了synchronized代码块,需要给你这个对象加下偏向锁。来,听话,把MarkWord给我”,一边说一边带着邪魅的微笑。 “我的MarkWord不能给你随便改,改坏了怎么办” “别怕,一会儿用完了我会给你恢复的” 我将信将疑,知道胳膊拗不过大腿,只好把头伸了过去,“你动手吧” 线程大哥执行了一个CAS操作,把我的MarkWord交换了,然后高高兴兴的离开了。 [为防抄袭,手动插入文字水印,敬请谅解。本文来自微信公众号:编程技术宇宙] 重偏向 过了一小会儿,又来了一个线程小姐姐。 “Hi,小朋友你好,我是3002号线程,现在我要来锁定你

万字图文 | 学会Java中的线程池,这一篇也许就够了!

霸气de小男生 提交于 2020-08-12 00:47:38
作者:一枝花算不算浪漫 来源:https://mp.weixin.qq.com/s/b9zF6jcZQn6wdjzo8C-TmA 线程池原理思维导图.png 前言 Java中的线程池已经不是什么神秘的技术了,相信在看的读者在项目中也都有使用过。关于线程池的文章也是数不胜数,我们站在巨人的肩膀上来再次梳理一下。 本文还是保持原有的风格,图文解析,尽量做到多画图!全文共20000+字,建议收藏后细细品读,阅读期间搭配源码食用效果更佳! 读完此文你将学到: ThreadPoolExecutor 中常用参数有哪些? ThreadPoolExecutor 中线程池状态和线程数量如何存储的? ThreadPoolExecutor 有哪些状态,状态之间流转是什么样子的? ThreadPoolExecutor 任务处理策略? ThreadPoolExecutor 常用的拒绝策略有哪些? Executors 工具类提供的线程池有哪些?有哪些缺陷? ThreadPoolExecutor 核心线程池中线程预热功能? ThreadPoolExecutor 中创建的线程如何被复用的? ThreadPoolExecutor 中关闭线程池的方法 shutdown 与 shutdownNow 的区别? ThreadPoolExecutor 中存在的一些扩展点? ThreadPoolExecutor

缓冲字节流BufferedInputStream的使用及原理分析

独自空忆成欢 提交于 2020-08-11 23:51:21
我们平时常常会对文件进行读取操作,如使用FileInputStream进行读取操作,则效率很低.为此我们可以使用缓冲字节流BufferedInputStream来操作,读取的效率会有很大的提升.在此我们介绍如何使用BufferedInputStream及分析其工作的原理. 一.使用介绍: 1.1定义: BufferedInputStream是高级流,不能直接对文件进行操作,只有低级流才能直接与文件相连,所以需套接一个低级流,例如: FileInputStream fis = new FileInputStream("test.txt" ); BufferedInputStream bis = new BufferedInputStream(fis); 1.2读取文件: 读取时,我们一般使用read()方法循环的方式读取,如读取到了文件末尾,则read()方法会返回-1,例如: int len = -1 ; while ((len=bis.read())!=-1 ){ System.out.println(len); } 通过循环读取的方式,可以将文件读取完毕. 二.原理分析: 通过以上内容了解了 BufferedInputStream的使用方式,那其工作原理是如何的呢?下面将通过BufferedInputStream的源码分析来了解其工作的原理. 2

JAVA多线程基础学习三:volatile关键字

我的未来我决定 提交于 2020-08-11 20:12:32
Java的volatile关键字在JDK源码中经常出现,但是对它的认识只是停留在共享变量上,今天来谈谈volatile关键字。 volatile,从字面上说是易变的、不稳定的,事实上,也确实如此,这个关键字的作用就是告诉编译器,只要是被此关键字修饰的变量都是易变的、不稳定的。那为什么是易变的呢?因为volatile所修饰的变量是直接存在于主内存中的,线程对变量的操作也是直接反映在主内存中,所以说其是易变的。 一、Java内存模型 Java内存模型规定所有的变量都是存在主存当中(类似于前面说的物理内存),每个线程都有自己的工作内存(类似于前面的高速缓存)。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。如下图: 看个例子: public class VolatileExample extends Thread{ // 设置类静态变量,各线程访问这同一共享变量 private static boolean flag = false ; // 无限循环,等待flag变为true时才跳出循环 public void run() { while (! flag){ }; System.out.println( "停止了" ); } public static void main(String[] args) throws