多线程

进程与线程的区别?

答:进程是所有线程的集合,每一个线程是进程中的一条执行路径,线程只是一条执行路径。

为什么要用多线程?

答:提高程序效率

多线程创建方式?

答:继承Thread或Runnable 接口。

是继承Thread类好还是实现Runnable接口好?

答:Runnable接口好,因为实现了接口还可以继续继承。继承Thread类不能再继承。

你在哪里用到了多线程?

答:主要能体现到多线程提高程序效率。

举例:分批发送短信、迅雷多线程下载等。

什么是多线程安全?

答:当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。做读操作是不会发生数据冲突问题。

如何解决多线程之间线程安全问题?

答:使用多线程之间同步或使用锁(lock)

为什么使用线程同步或使用锁能解决线程安全问题呢?

答:将可能会发生数据冲突问题(线程不安全问题),只能让当前一个线程进行执行。被包裹的代码执行完成后释放锁,让后才能让其他线程进行执行。这样的话就可以解决线程不安全问题。

什么是多线程之间同步?

答:当多个线程共享同一个资源,不会受到其他线程的干扰。

什么是同步代码块?

答:就是将可能会发生线程安全问题的代码,给包括起来。只能让当前一个线程进行执行,被包裹的代码执行完成之后才能释放所,让后才能让其他线程进行执行。

多线程同步的分类?

1.使用同步代码块?

synchronized(同一个数据){可能会发生线程冲突问题
}private Object mutex = new Object();// 自定义多线程同步锁public void sale() {synchronized (mutex) {if (trainCount > 0) {
try {Thread.sleep(10);} catch (Exception e) {}System.out.println(Thread.currentThread().getName() + ",出售 第" + (100 - trainCount + 1) + "张票.");trainCount--;   }}}

2.使用同步函数

在方法上修饰synchronized 称为同步函数

public synchronized void sale() {if (trainCount > 0) {
try {Thread.sleep(40);} catch (Exception e) {}System.out.println(Thread.currentThread().getName() + ",出售 第" + (100 - trainCount + 1) + "张票.");trainCount--;}}

3.静态同步函数

方法上加上static关键字,使用synchronized 关键字修饰 为静态同步函数

静态的同步函数使用的锁是 该函数所属字节码文件对象

同步代码块与同步函数区别?

答:

同步代码使用自定锁(明锁)

同步函数使用this锁

同步函数与静态同步函数区别?

注意:有些面试会这样问:例如现在一个静态方法和一个非静态静态怎么实现同步?

答:

同步函数使用this锁

静态同步函数使用字节码文件,也就是类.class

什么是多线程死锁?

答:

同步中嵌套同步,无法释放锁的资源。

解决办法:同步中尽量不要嵌套同步

Wait()与Notify ()区别?

Wait让当前线程有运行状态变为等待状态,和同步一起使用

Notify 唤醒现在正在等待的状态,和同步一起使用

Wait()与sleep()区别?

对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。

sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。

在调用sleep()方法的过程中,线程不会释放对象锁。

而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备

获取对象锁进入运行状态。

Lock与Synchronized区别?

Lock 接口可以尝试非阻塞地获取锁 当前线程尝试获取锁。如果这一时刻锁没有被其他线程获取到,则成功获取并持有锁。
*Lock 接口能被中断地获取锁 与 synchronized 不同,获取到锁的线程能够响应中断,当获取到的锁的线程被中断时,中断异常将会被抛出,同时锁会被释放。

Lock 接口在指定的截止时间之前获取锁,如果截止时间到了依旧无法获取锁,则返回。

Condition用法

Condition的功能类似于在传统的线程技术中的,Object.wait()和Object.notify()的功能,

代码:

Condition condition = lock.newCondition();
res. condition.await();  类似wait
res. Condition. Signal() 类似notify
Signalall notifyALL

如何停止线程?

1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。

2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。

3. 使用interrupt方法中断线程。 线程在阻塞状态

什么是守护线程

Java中有两种线程,一种是用户线程,另一种是守护线程。

当进程不存在或主线程停止,守护线程也会被停止。

使用setDaemon(true)方法设置为守护线程

join()方法作用

join作用是让其他线程变为等待,只有当前线程执行完毕后,等待的线程才会被释放。

线程三大特性

多线程有三大特性,原子性、可见性、有序性

原子性:保证数据一致性,线程安全。

可见性:对另一个线程是否课件

有序性:线程之间执行有顺序

希望以上对大家有所帮助!

我的官方群点击此处1009139853。加入群聊【java学习交流群】,一起学习,相互讨论。

群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。

JAVA高薪就业(视频,学习路线资料,免费领取)

对于正在学习java的小伙伴们,相信这些对你们还是有帮助的,希望在学java的路上少走弯路,多

吸取一些前辈的经验,欢迎攻城狮,程序猿们加入学习交流群,不管你是领取资料也

好,还是交流心得,询问问题,吸取经验,欢迎前来交流。

(2020)最新 java 多线程面试题(其一)相关推荐

  1. 2020最新Java集合面试题

    2020最新Java集合面试题 1.ArrayList和linkedList的区别 Array(数组)是基于索引**(index)**的数据结构,它使用索引在数组中搜索和读取数据是很快的. Array ...

  2. 2020最新Java面试题

    2020最新Java面试题 序 Java基础 JVM Redis 序 研发了这么多年,每天都在搬砖,斗转星移,从一个被面试者,成为了一个面试者.总感觉自己在面试的时候提出的问题没有一个由浅入深的感觉, ...

  3. 史上最全 Java 多线程面试题及答案

    这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...

  4. 15个顶级Java多线程面试题及回答(高级java工程师)

    Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是 ...

  5. 15个顶级Java多线程面试题及答案

    转载自  15个顶级Java多线程面试题及答案 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得更多职位,那么你应该准备很多关于多线程的问题. 他们会问面试者很多令人混淆 ...

  6. 15个Java多线程面试题

    2019独角兽企业重金招聘Python工程师标准>>> 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很 ...

  7. 2022 最新 Java 基础 面试题(一)

    2022 最新 Java 基础 面试题(一) 1.面向对象的特征有哪些方面? 3.String 是最基本的数据类型吗? 4.float f=3.4;是否正确? 5.short s1 = 1; s1 = ...

  8. Java多线程面试题-可能学了个寂寞?

    文章目录 进程和线程 并发和并行 上下文切换 sleep()和wait() start()和run() synchronized关键字 volatile关键字 ThreadLocal 线程池 Runn ...

  9. 精选30道Java多线程面试题

    转载自 精选30道Java多线程面试题 1.线程和进程的区别 2.实现线程有哪几种方式? 3.线程有哪几种状态?它们之间如何流转的? 4.线程中的start()和run()方法有什么区别? 5.怎么终 ...

  10. 史上最全Java多线程面试题

    转载自 史上最全Java多线程面试题及答案 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域.所以,学好多线程并发编程对Java程序员来来说极其重要的. 下面小编整理了60道最常见的 ...

最新文章

  1. Linux2.6--进程抢占和上下文切换
  2. String.IsNullOrEmpty()方法以及C#中的示例
  3. python多进程 保活_老板,你这个爬虫保活吗?
  4. 移动边缘计算与计算卸载概述
  5. [AndroidO] [RK3399] -- 支持 CH341 驱动 -- 驱动模块的标准添加流程
  6. FIT2CLOUD云管平台完成华为云鲲鹏云服务兼容性认证
  7. C/C++ 内存泄漏检测工具汇总
  8. 如何直接从TI官方获得芯片的原理图和封装
  9. 为实体提供枚举类型的支持
  10. Linux搭建web网站综合实验
  11. PTA 6-10 二分查找
  12. css3 烟 蚊香_前端每日实战:48# 视频演示如何用纯 CSS 创作一盘传统蚊香
  13. Google Earth Engine ——MOD13A1 /A2V6产品在每个像素的基础上提供植被指数(VI)值(NDVI和EVI)
  14. 大数据产品价值主张_十年之后大数据的价值主张
  15. svn 合并分支到主干
  16. 哈工大数据库系统(上):关系模型之基本概念(三)课后测验与作业
  17. 索尼计划把区块链用于数字版权数据
  18. 将整型数据转化为字符型数据(C/C++)
  19. apf svg matlab,百科|APF和SVG的区别与联系
  20. 对计算机科学的反思(转计算所李国杰文章)

热门文章

  1. PHP能源管理系统ems,能源管理系统(EMS)方案.doc
  2. docker修改容器ip范围
  3. PUBG 绝地逃亡 吃鸡压枪宏 彩虹六号压枪宏 Autohotkey
  4. 佐罗一键新机数据导出导入文件夹
  5. SSM框架的原理和运行流程
  6. 登录虚拟服务器,虚拟化服务器登录及操作方法说明
  7. 如何下载使用MSDN原版系统镜像
  8. Bootstrap优秀模板-INSPINIA.2.9.2
  9. Acrel-2000Z电力监控系统的应用
  10. DEA数据包络分析python代码记录