8.callable与fature
  Callable与Runnable类似,但是Callable有返回值,并且有一个参数化的类型。
  Fature保存异步计算的结果。
9.执行器
  Executor.
10.同步器
  ...
11.多线程生产者消息者问题
  使用await与notify或者notifyAll解决。
12.死锁问题
  使用notifyAll或者wait(long mills)计时等待解决。
13.解决同步问题的方法总结
  A、synchronized关键字加锁;

  B、ReentrantLock加锁;

  C、使用现有的同步队列、类等;

  D、使用volatile关键字。
14.你使用过java.util.concurrent包下的哪些类?
  A、java.util.concurrent.ExecutionException;
  B、java.util.concurrent.Future;
  C、java.util.concurrent.Callable
  D、java.util.concurrent.SynchronousQueue
  E、java.util.concurrent.ThreadFactory;
  F、java.util.concurrent.ThreadPoolExecutor;
  G、java.util.concurrent.TimeUnit;
  H、java.util.concurrent.atomic.AtomicInteger;
  I、concurrentHashMap;
  J、countDownLatch;
  K、信息量:Semaphore;
  L、阻塞队列:BlockingQueue及其实现类;
  ...再加上资源池相应的包org.apache.commons.pool2下的包。
15.同一帐户,多个用户同时存,同时取,如何处理并发线程安全问题?
  使用锁,应用程序锁,数据库锁,设置spring事务的隔离级别;

16.sleep、wait、notify、notifyAll的区别?
  16.1 sleep 和wait:
    16.1.1. sleep是Thread类的静态方法,wait是Object类中定义的方法
    16.1.2. Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁,而wait 会释放当前线程锁
    16.1.3. Thread.sleep需要设定休眠时间.Object.wait也可以设定wait时间,或者通过线程执行notify/notifyAll进行唤醒
  16.2 notify和notifyAll:
    16.2.1. notify唤醒一个线程,如果有多线程在wait,可能是随机一个
    16.2.2. notifyAll唤醒所有在等待的线程,
    16.2.3. 使用中尽量使用notifyAll,因为notify容易导致线程死锁(nofity只唤醒一个,其他等待的线程没有唤醒)
17.join、yield、wait和sleep
  参考:https://blog.csdn.net/Crazypokerk_/article/details/87171229
  17.1 yield: 只是使当前线程重新回到可执行状态,所以执行yield()线程有可能在进入到可执行状态后马上又被执行.
  17.2 join: join()就是让其他线程变为等待(结合例子:知道j1执行完后,才释放).
  17.3 wait: 是当前线程处于等待状态,会释放当前的锁资源,使用wait()的时候要处理.
  17.4 sleep: 使当前的正在执行线程处于停滞状态,sleep()使线程进入堵塞状态,同时不会释放所资源.
18.实际应用中如何处理多线程生产者消费者问题?
  在现实中你解决的许多线程问题都属于生产者消费者模型,就是一个线程生产任务供其它线程进行消费,你必须知道怎么进行线程间通信来解决这个问题。
  18.1 比较低级的办法是用wait和notify来解决这个问题;
  18.2 比较赞的办法是用Semaphore 或者 BlockingQueue来实现生产者消费者模型;
19.如何避免死锁?
  19.1 Java多线程中的死锁,死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
  19.2 这是一个严重的问题,因为死锁会让你的程序挂起无法完成任务,死锁的发生必须满足以下四个条件:
  19.2.1 互斥条件:一个资源每次只能被一个进程使用。
  19.2.2 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  19.2.3 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  19.2.4 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
19.3 如何避免死锁
  避免死锁最简单的方法就是阻止循环等待条件,将系统中所有的资源设置标志位、排序,规定所有的进程申请资源必须以一定的顺序(升序或降序)做操作来避免死锁。  
  具体方法如下:

20、java并发包都有哪些线程池类?
  Executors已提供工厂方法创建的包括如下4个线程池,以及可以通过ThreadPoolExecutor创建自己定制的线程池。
    • newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
    • newFixedThreadPool:创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
    • newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
    • newScheduledThreadPool:创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。
    • newSingleThreadScheduledExecutor:创建一个单线程的线程池。此线程池支持定时以及周期性执行任务的需求。

java多线程的一些面试题的更多相关文章

  1. JAVA多线程高并发面试题总结

    ReadMe : 括号里的内容为补充或解释说明. 多线程和高并发是毕业后求职大厂面试中必问的知识点,自己之前总是面试前才去找相关的知识点面试题来背背,隔段时间又忘了,没有沉淀下来,于是自己总结了下相关 ...

  2. 面试大厂必看!就凭借这份Java多线程和并发面试题,我拿到了字节和美团的offer!

    最近好多粉丝私信我说在最近的面试中老是被问到多线程和高并发的问题,又对这一块不是很了解,很简单就被面试官给问倒了,被问倒的后果当然就是被刷下去了,因为粉丝要求,我最近也是花了两天时间 给大家整理了这一 ...

  3. JAVA多线程学习十七 - 面试题

    前面针对多线程相关知识点进行了学习,那么我们来来看看常见的面试题: 1. 空中网面试题1 package com.kongzhongwang.interview; import java.util.c ...

  4. Java多线程与并发面试题

    1,什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一 ...

  5. 那些面试官必问的JAVA多线程和并发面试题及回答

    Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环 ...

  6. 50个Java多线程面试题

    不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java 语言一个重要的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎.大多数待遇丰厚的 Java 开发职位都要求开发者 ...

  7. 分享Java程序员50多道热门的多线程和并发面试题(答案解析)

    下面是Java程序员相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  8. 53道java多线程面试题整理及答案(2018年)

    最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案. 为此我业余时间整理了Java多线程相关的53道常见面试题,及详细答案,你可以用它来好好准备面试.望各路大牛,发现不 ...

  9. Java基础学习总结(68)——有关Java线程方面的面试题

    不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java 语言一个重要的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎.大多数待遇丰厚的 Java 开发职位都要求开发者 ...

随机推荐

  1. Java基础00-形参和返回值22

    1. 形参和返回值 1.1 类名作为形参和返回值 1.2 抽象类名作为形参和返回值 代码示例: 方法的形参是抽象类名 抽象动物类:定义了一个抽象的eat方法 动物的操作类:创建一个useAnimal方 ...

  2. python + Excel数据读取(更新)

    data.xlsx 数据如下: import xlrd#1.读取Excel数据# table = xlrd.open_workbook("data.xlsx","r&qu ...

  3. Docker与k8s的恩怨情仇(六)—— “容器编排”上演“终结者”大片

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在上节中,我们为大家介绍了Pod的基础内容,Kubernetes如何站在上帝视角上处理容器和容器之间的关系. ...

  4. Linux中tomcat随服务器自启动的设置方法

    1. cd到rc.local文件所在目录,一般在 /etc/rc.d/目录. 2. 将rc.local下载到本地windows系统中. 3. 编辑rc.local,将要启动的tomcat  /bin/ ...

  5. charles f配置sslproxy 对protobuf 接口抓包 -不推荐

    charles 配置sslproxy help-安装电脑证书 手机连接访问电脑,下载允许手机 手机连接vpn 手机访问chls.pro/ssl -下载证书 request可以看到protobuf_tx ...

  6. Hexo搭建静态博客站点

    什么是Hexo? Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页. 本文将介绍如何在没有域名和云主机的 ...

  7. 构建后端第6篇之---java 多态的本质 父类引用 指向子类实现

    张艳涛写于2021-2-20 今天来个破例了,不用英文写了,今天在家里电脑写的工具不行,简单的说 主题是:java多态的原理与实现 结论是:java的多态 Father father= new Son ...

  8. intouch 开发源程序加密方法

    在先前项目中,因为同行竞争被拷贝走了源程序代码,以至于被上司责备,故而亡羊补牢对intouch(10.1老版本进行源代码加密探索)整理方法如下. 1.intouch wondermarker打开源程序 ...

  9. SAS启动时自动执行代码

    有时候我们希望SAS启动时自动执行已经编写好的程序,可以按照以下方法实现: 首先正常打开SAS,编写我们想要让SAS启动时自动执行的代码,例如获取桌面文件夹路径,以便在其他程序中引用这个路径. pro ...

  10. DC-5靶机

    仅供个人娱乐 靶机信息 下载地址:http://www.five86.com/downloads/DC-5.zip 一.主机扫描 arp-scan -l nmap -p 1-65535 -A  -sV ...