并发编程
专注Java面试整理
Java
展开
-
Java高并发编程:总线锁定和缓存一致性的问题
随着多核时代的到来,并发操作已经成了很正常的现象,操作系统必须要有一些机制和原语,以保证某些基本操作的原子性,比如处理器需要保证读一个字节或写一个字节是原子的,那么它是如何实现的呢?有两种机制:总线锁定和缓存一致性。 我们知道,CPU和物理内存之间的通信速度远慢于CPU的处理速度,所以CPU有自己的内部缓存,根据一些规则将内存中的数据读取到内部缓存中来,以加快频繁...转载 2018-11-29 11:06:59 · 132 阅读 · 0 评论 -
一、并发的优势和缺点
学习内容并发的优势和缺点 优点资源利用率更好程序设计在某些情况下更简单程序响应更快 缺点 1、频繁的上下文切换时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得多个线程是同时执行的,时间片一般是几十毫秒。而每次切换时,需要保存当前的状态起来,以便能够进行恢复先前状态,而这个切换时非常损耗性能,过于频繁反而无法发挥出...原创 2018-12-10 17:08:53 · 2018 阅读 · 0 评论 -
二、并发相关术语概念
学习内容并发和并行同步和异步临界区阻塞和非阻塞死锁、饥饿、活锁Amdahl定律、Gustafson定律、Sun-Ni 定律并发和并行解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。 同步和异步同步和异步通常用来形容一次方法调用。同步...原创 2018-12-10 17:15:27 · 285 阅读 · 0 评论 -
四、Java共享对象
学习内容一、共享引发的问题 1.1、可见性 1.2、原子性 1.3、解决方案 加锁、volatile二、发布与逸出 2.2、不安全的发布 2.3、安全发布 不可变对象、事实不可变对象、可变对象 安全发布的常用模式...原创 2018-12-11 16:07:43 · 1336 阅读 · 0 评论 -
Java多线程面试专题一(共5篇)
1、下面哪些是Thread类的方法()A start() B run() C exit() D getPriority()答案:ABD,看Java API docs:,exit()是System类的方法,如System.exit(0)。 2、下面程序的运行结果:() public static void main(String a...原创 2019-01-24 15:06:00 · 652 阅读 · 0 评论 -
Java多线程面试专题二(共5篇)
53、如何停止一个线程停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法。在java中有以下3种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 使用stop方法强行...原创 2019-01-24 15:07:34 · 670 阅读 · 0 评论 -
Java多线程面试专题三(共5篇)
1、JVM能创建的最大线程数由谁限制的?首先要说明一点,Java线程的实现是基于底层系统的线程机制来实现的,程序中开的线程并不全部取决于JVM虚拟机栈,而是取决于CPU,操作系统,其他进程,Java的版本。JVM的线程与计算机本身性能相关。答案显然不是的,在不考虑系统本身限制的情况下,主要跟JVM一下几点有关:-Xms 初始堆大小 (在实际生产中,一般把-Xms和-Xmx设置成一样的。...原创 2019-01-24 15:08:20 · 425 阅读 · 0 评论 -
Java多线程面试专题四(共5篇)
必问:有三个线程T1,T2,T3,怎么确保它们按顺序执行? 在多线程中有多种方法让线程按特定顺序执行,你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。为了确保三个线程的顺序你应该先启动最后一个(T3调用T2,T2调用T1),这样T1就会先完成而T3最后完成。参考同步文件夹 1、方法m1和m2有区别吗?public class Test ...原创 2019-01-24 15:09:06 · 370 阅读 · 0 评论 -
Java多线程面试专题五(共5篇)
1、什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?原子操作是指一个不受其他操作影响的操作任务单元。原子操作是在多线程环境下避免数据不一致必须的手段。int++并不是一个原子操作,所以当一个线程读取它的值并加1时,另外一个线程有可能会读到之前的值,这就会引发错误。为了解决这个问题,必须保证增加操作是原子的,在JDK1.5之...原创 2019-01-24 15:09:44 · 259 阅读 · 0 评论