保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

并发编程看完这篇,所有Java并发编程的问题你都能应对自如

  1、synchronized修饰普通方法和静态方法的区别?什么是可见性?
  对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。
  但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存在的,类锁其实锁的是每个类的对应的class对象。类锁和对象锁之间也是互不干扰的。对象锁:对象锁synchronized修饰普通方法锁的是当前类实例对象publicsynchronizedvoidsyncMethod1(){doworking。。。}复制代码privatefinalObjectonewObject();对象锁锁的是Object对象实例publicvoidsyncMethod2(){synchronized(o){doworking。。。}}复制代码类锁:类锁synchronized修饰静态方法锁的是当前类唯一的。class对象,也就是SynchronizedType。class,等同于下面的syncMethod3()publicstaticsynchronizedvoidsyncMethod3(){doworking。。。}复制代码类锁锁的是当前类唯一的。class对象。publicvoidsyncMethod4(){synchronized(SynchronizedType。class){doworking。。。}}复制代码
  可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
  由于线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量,那么对于共享变量V,它们首先是在自己的工作内存,之后再同步到主内存。可是并不会及时的刷到主存中,而是会有一定时间差。很明显,这个时候线程A对变量V的操作对于线程B而言就不具备可见性了。
  要解决共享对象可见性这个问题,我们可以使用volatile关键字或者是加锁。2、锁分哪几类?
  3、CAS无锁编程的原理。
  使用当前的处理器基本都支持CAS()的指令,只不过每个厂家所实现的算法并不一样,每一个CAS操作过程都包含三个运算符:一个内存地址V,一个期望的值A和一个新值B,操作的时候如果这个地址上存放的值等于这个期望的值A,则将地址上的值赋为新值B,否则不做任何操作。
  CAS的基本思路就是,如果这个地址上的值和期望的值相等,则给其赋予新值,否则不做任何事儿,但是要返回原值是多少。循环CAS就是在一个循环里不断的做CAS操作,直到成功为止。
  还可以说说CAS的三大问题。4、ReentrantLock的实现原理。
  线程可以重复进入任何一个它已经拥有的锁所同步着的代码块,synchronized、ReentrantLock都是可重入的锁。在实现上,就是线程每次获取锁时判定如果获得锁的线程是它自己时,简单将计数器累积即可,每释放一次锁,进行计数器累减,直到计算器归零,表示线程已经彻底释放锁。
  底层则是利用了JUC中的AQS来实现的。5、AQS原理。
  是用来构建锁或者其他同步组件的基础框架,比如ReentrantLock、ReentrantReadWriteLock和CountDownLatch就是基于AQS实现的。它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。它是CLH队列锁的一种变体实现。它可以实现2种同步方式:独占式,共享式。
  AQS的主要使用方式是继承,子类通过继承AQS并实现它的抽象方法来管理同步状态,同步器的设计基于模板方法模式,所以如果要实现我们自己的同步工具类就需要覆盖其中几个可重写的方法,如tryAcquire、tryReleaseShared等等。
  这样设计的目的是同步组件(比如锁)是面向使用者的,它定义了使用者与同步组件交互的接口(比如可以允许两个线程并行访问),隐藏了实现细节;同步器面向的是锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。这样就很好地隔离了使用者和实现者所需关注的领域。
  在内部,AQS维护一个共享资源state,通过内置的FIFO来完成获取资源线程的排队工作。该队列由一个一个的Node结点组成,每个Node结点维护一个prev引用和next引用,分别指向自己的前驱和后继结点,构成一个双端双向链表。6、synchronized的原理以及与ReentrantLock的区别。
  synchronized(this)原理:涉及两条指令:monitorenter,monitorexit;再说同步方法,从同步方法反编译的结果来看,方法的同步并没有通过指令monitorenter和monitorexit来实现,相对于普通方法,其常量池中多了ACCSYNCHRONIZED标示符。
  JVM就是根据该标示符来实现方法的同步的:当方法被调用时,调用指令将会检查方法的ACCSYNCHRONIZED访问标志是否被设置,如果设置了,执行线程将先获取monitor,获取成功之后才能执行方法体,方法执行完后再释放monitor。在方法执行期间,其他任何线程都无法再获得同一个monitor对象。7、synchronized锁了那些优化?
  引入如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁、逃逸分析等技术来减少锁操作的开销。逃逸分析
  如果证明一个对象不会逃逸方法外或者线程外,则可针对此变量进行优化:
  同步消除synchronizationElimination,如果一个对象不会逃逸出线程,则对此变量的同步措施可消除。锁消除和粗化
  锁消除:虚拟机的运行时编译器在运行时如果检测到一些要求同步的代码上不可能发生共享数据竞争,则会去掉这些锁。
  锁粗化:将临近的代码块用同一个锁合并起来。消除无意义的锁获取和释放,可以提高程序运行性能。8、synchronizedstatic与非static锁的区别和范围。
  对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。
  但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存在的,类锁其实锁的是每个类的对应的class对象。类锁和对象锁之间也是互不干扰的。9、volatile能否保证线程安全?在DCL上的作用是什么?
  不能保证,在DCL的作用是:volatile是会保证被修饰的变量的可见性和有序性,保证了单例模式下,保证在创建对象的时候的执行顺序一定是
  1。分配内存空间
  2。实例化对象instance
  3。把instance引用指向已分配的内存空间,此时instance有了内存地址,不再为null了的步骤,从而保证了instance要么为null要么是已经完全初始化好的对象。10、volatile和synchronize有什么区别?
  volatile是最轻量的同步机制。
  volatile保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。但是volatile不能保证操作的原子性,因此多线程下的写复合操作会导致线程安全问题。
  关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性,又称为内置锁机制。11、什么是守护线程?你是如何退出一个线程的?
  Daemon(守护)线程是一种支持型线程,因为它主要被用作程序中后台调度以及支持性工作。这意味着,当一个Java虚拟机中不存在非Daemon线程的时候,Java虚拟机将会退出。可以通过调用Thread。setDaemon(true)将线程设置为Daemon线程。我们一般用不上,比如垃圾回收线程就是Daemon线程。线程的中止:
  要么是run()执行完成了,要么是抛出了一个未处理的异常导致线程提前结束。
  暂停、恢复和停止操作对应在线程Thread的API就是suspend()、resume()和stop()。但是这些API是过期的,也就是不建议使用的。因为会导致程序可能工作在不确定状态下。
  安全的中止则是其他线程通过调用某个线程A的interrupt()方法对其进行中断操作,被中断的线程则是通过线程通过方法isInterrupted()来进行判断是否被中断,也可以调用静态方法Thread。interrupted()来进行判断当前线程是否被中断,不过Thread。interrupted()会同时将中断标识位改写为false。12、sleep、wait、yield的区别,wait的线程如何唤醒它?
  yield()方法:使当前线程让出CPU占有权,但让出的时间是不可设定的。也不会释放锁资源。所有执行yield()的线程有可能在进入到就绪状态后会被操作系统再次选中马上又被执行。
  yield()、sleep()被调用后,都不会释放当前线程所持有的锁。
  调用wait()方法后,会释放当前线程持有的锁,而且当前被唤醒后,会重新去竞争锁,锁竞争到后才会执行wait()方法后面的代码。
  wait通常被用于线程间交互,sleep()通常被用于暂停执行,yield()方法使当前线程让出CPU占有权。wait的线程使用notifynotifyAll()进行唤醒。13、sleep是可中断的么?
  sleep本身就支持中断,如果线程在sleep期间被中断,则会抛出一个中断异常。14、线程生命周期。
  Java中线程的状态分为6种:初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为运行。
  线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。
  3。阻塞(BLOCKED):表示线程阻塞于锁。
  4。等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
  5。超时等待(TIMEDWAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。终止(TERMINATED):表示该线程已经执行完毕。
  15、ThreadLocal是什么?
  ThreadLocal是Java里一种特殊的变量。ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。
  在内部实现上,每个线程内部都有一个ThreadLocalMap,用来保存每个线程所拥有的变量副本。16、线程池基本原理。
  在开发过程中,合理地使用线程池能够带来3个好处。
  第一:降低资源消耗。
  第二:提高响应速度。
  第三:提高线程的可管理性。
  1)如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步骤需要获取全局锁)。
  2)如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue。
  3)如果无法将任务加入BlockingQueue(队列已满),则创建新的线程来处理任务。
  4)如果创建新线程将使当前运行的线程超出maximumPoolSize,任务将被拒绝,并调用RejectedExecutionHandler。rejectedExecution()方法。17、有三个线程T1,T2,T3,怎么确保它们按顺序执行?
  使用join()实现。

快乐的元旦联欢会作文范文4篇快乐的元旦联欢会作文范文1新的一年又开始了,内心充满了对新生活的渴望,但烦恼也如期而至。朋友y约我出去玩,说要去ktv。从来没有去过,也不想去那个鱼龙混杂的地方。朋……2015年泰安中考作文题目伯牙与钟子期春秋时,伯牙擅弹古琴,只是恨无知音。有次伯牙乘船外出,时值中秋之夜,偶遇一樵夫钟子期。伯牙每弹一曲,子期都能讲出乐曲的内容和感情。两人在船上互诉衷肠,引为知音。并约定一年之后在……老人全身奇痒难忍怎么办全身奇痒难耐是很多老年人都存在的皮肤问题,尤其是在午后和夜间,总是莫名其妙浑身发痒,怎么挠都不能止痒,身上成片的挠痕和血痂,衣服上、床单被褥上都有血渍,整个人也非常急躁,不耐烦……老年人跌倒的预防措施你知道几条?1。选择防滑且合体的衣物及鞋子。2。避免走过陡的楼梯或台阶。3。起床做到三个一分钟:醒后床上平躺一分钟;床边坐一分钟;床旁站一分钟。4。如厕时尽可能使用扶手,转身和起身均需放慢……常州这座乐园,却藏着一座春秋城池遗址,很多本地人都不知道常州有龙城之称,是国家历史文化名城,其历史最早可追溯至2500多年前的春秋时期,据历史文献记载:吴王余祭封季札于延陵,这也是常州的第一个名称,即延陵,常州之名始于隋文帝开皇九年……一周增减持扫地茅遭小米系套现25亿,5连板钱江水利股东计划减记者陈慧东编辑上周(5月16日至5月22日),A股公司预减持规模与之前持平。据界面新闻不完全统计,共有62家A股公司披露股东减持计划。减持方面,钱江水利(60……骑行川藏线第二十一天闲逛旅游小镇鲁朗本来计划今天骑行到林芝,但是昨天从这里出发的三个骑友,忙了一整天,到晚上十点后走夜路才赶到林芝,我和老孙一番商量,最后还是决定骑到鲁朗吧!早上七点吃好饭,回屋又睡了个回笼……假如我是魔法师作文范文我是一个非常普通的女孩,但我一直盼望着某一天我能拥有神奇的魔法,成为一个无所不能的神秘魔法师。假如我是魔法师,我会戴上尖顶魔法帽,披着隐身大披风,手拿魔杖,每天坐着飞毯在天空巡……千秋无绝色,悦目是佳人,倾国倾城貌,惊为天下人当我凝视到你的眼睛,当我听到你的声音,当我闻到你秀发上的淡淡清香,当我感受到我剧烈的心跳,我明白了:你是我今生的唯一!在人流中,我一眼就发现了你。我不敢说你是她们中最漂亮……飞鸟的话四年级作文飞鸟对大地说:大地妈妈,我永远不会忘记,你给了我,高远的天空,落脚的大树,筑巢的树丫。大地妈妈,我会衔来种子,让雨水滋润这……家风伴我行作文看到这个题目,也许有人会问家风是什么?在我的定义里,家风是指一个家庭中所有成员为人处世的态度和行为规范。家风犹如磁铁一般将每个家庭成员紧紧地吸附在上面,让人们在任何时候都能做到……高三读后感红楼梦读后感中国有四大名着《水浒传》、《三国演义》、《西游记》和《红楼梦》,部部皆是精彩绝伦,而作为一个女孩子,前三部对我而言没有多大兴趣,它们涉及到了军事、政治、神话,所以最吸引我的则非……
真正的强者敢于走出舒适区,不怕风霜剑雨,注定成就非凡斯迈尔斯曾说:人若有志,万事可为。真正有踌躇大志的人,会把整个苍穹当作舞台,他们在逆境中百炼成钢,像雄鹰一样直击长空,拥有绳锯木断的毅力,以及破釜沉舟的勇气,注定非等闲之辈。……大地朗照家园作者:刘东黎(中国林业出版社社长、总编辑)土生万物,地载群伦。土地是万物的根基,生命、生产、生计、生活、生态、生业等皆与土地有关。人在大地上培育作物,保护大地上的农作物和……人生,争什么,吵什么,一晃都老了(精辟)人这一辈子说长不长,当然说短也不短,生活在快乐之中的人,也许根本就没有意识到时光的流逝,忽然有一天回头一看,却已经过去了许多年。对于生活有目标,有追求的人来说,他们总是觉得时间……集度概念车ROBO01正式发布!引领智能汽车3。0变革科技先生6月8日讯,集度首场品牌发布会ROBODAY在元宇宙平台希壤举办,首款汽车机器人概念车ROBO01正式发布。根据此前公布的信息来看,新车将于2023年上市交付,标……人生低谷不要放弃,你的存在就是最好的价值作者常溪紫道来源蜂氓IDfengmeng2019罗翔说:我发现真正伟大的人格并不是站在高处,接受鲜花和掌声。真正伟大的人格是在人生的低谷,依然可以振作,……冰心名言读书好,好读书假如生命是无趣的,我怕有来生,假如生命是有趣的,今生已是满足的了。下面是小编给大家分享的冰心名言读书好,好读书,快来看看吧。1、一个朋友,嵌在一个人的心天中,如同星座在青……冀中股份内蒙古公司朝着实现千万吨矿区目标挺进4月20日,盛鑫煤业产能核增获批,年产能力增至150万吨年;5月27日,嘉东煤业产能核增获批,年产能力增至210万吨年;5月31日,嘉信德煤业产能核增获批,年产能力增至300万……生命最初的感动初三作文范文多少次,翻动着儿时的作业本,在曾经幼稚的作业本上寻找您的批语;多少次,漫步在记忆的森林里,寻找生命最初的感动,那是您一句话的力量我是一个在农村长大的孩子,到上小学时才会到……九寨沟旅游之行之我被坑在草原了九寨沟大家应该都知道,的确风景优美秀丽,人生如果说必去的景点之一那一定有九寨沟。九寨沟美景而我这次说的是需要避坑的地方,那就是若儿盖草原,尤其是不能乘坐九寨沟景区门……暑期旅行带上Reno8Pro,双芯加持的它,打卡拍摄更出众这几天正值是全国高考,考生在考场里奋笔疾书,校外有许多人为考生们保障后勤。而OPPO中国区零售联合服务中心在高考期间,也于全国255城市开展了1000场Reno8助考补给站,可……新疆村里的故事观后感《村里的故事》以轻喜剧的方式,用充满新疆特色的真实故事,朴实诙谐的语言,民族特色的表演,幽默亲近的风格,讲述了村支部书记阿扎提一心为百姓办实事,带领党员干部和群众维护稳定、发展……环保人人有责的作文保护我们的环境,珍爱我们的家园。是我们每个人应尽的责任。茂密的森林,宽阔的海洋,各种各样的生物,构成了我们这个美丽的大自然,我们共同生活在地球上,地球是我们人类赖以生存的唯一家……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网