`
youyu4
  • 浏览: 440079 次
社区版块
存档分类
最新评论

java多线程之面试题

 
阅读更多

java多线程之面试题

 

 

怎么理解多线程?

 

1. 让应用程序在一个时间段做多个事情,提高效率

2. 可以实现异步的效果,主线程马上返回成功,子线程继续去工作

 

 

 

程序、进程、线程的关系

 

一个程序,就有一个进程,一个进程中可以有多个线程,其中又分为主线程和子线程。

 

 

 

理解并发与并行

 

并发:通过CPU调度算法,让用户看上去同时执行,实际上,是通过CPU在高速切换,并不是真正的额同时

并行:多个CPU实例或者多台机器同时执行一段处理逻辑,这就是真正的同时;

 

 

 

如何创建线程?

 

1. 继承Thread

2. 实现Runnable接口(优先选择)

 

注意:

1. 都要重写run()方法

2. 调用thread.start(),线程才真正启动

 

 

 

线程的各种状态

 

可执行(Runnable):当调用start()方法后,一个线程变为可执行状态,但是并不意味着他会立刻开始真正地执行。而是被放入线程池,由线程调度器根据线程优先级决定何时挂起执行。

 

执行中(Running):处理器已经在执行线程的代码。他会一直运行直到被阻断,或者通过静态方法Thread.yield()自行放弃执行的机会,考虑到场景切换所带来的开销,yield()方法不应该被经常调用。

 

等待中(Waiting):线程由于等待I/O等外部进程的处理结果而处于被阻断的状态,调用currObject.wait( )方法会使得当前线程进入等待状态,直到其它线程调用currObject.notify() 或者currObject.notifyAll() 。

 

睡眠中(Sleeping):重载方法Thread.sleep(milliseconds),Thread.sleep(milliseconds, nanoseconds)可以迫使Java线程进入睡眠状态(挂起)。

 

由于I/O阻塞(Blocked on I/O):当I/O条件发生变化时(例如读取了几个字节的数据)会迁移到可执行状态。

 

由于同步阻塞中(Blocked on synchronization): 当获取锁之后会进入执行中状态。

 

 

 

多线程一般怎么用?

 

线程池,线程池工作原理

 

 

 

为什么要用线程池

 

1. 对于一些简单的工作,每次创建和销毁线程,比较耗资源

2. 每次创建和销毁线程,也让程序变慢

3. 每个进程的中,可以创建的线程是有限的,为了保护服务器,这也是必须的

 

 

 

Java线程池中submit() 和 execute()方法有什么区别?

 

两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中, 而submit()方法可以返回持有计算结果的Future对象,它定义在ExecutorService接口中,它扩展了Executor接口,其它线程池类像ThreadPoolExecutor和ScheduledThreadPoolExecutor都有这些方法。

 

 

 

什么是多线程的线程安全

 

保证共享资源在多线程的情况下不会出现错乱。

 

 

 

如何保证线程安全

 

synchronized

同步方法、同步类、同步块

缺点:不灵活

 

Lock

可重入锁

读写锁

1. 多个读同时读,不加锁

2. 多个写互斥

3. 有读有写,写优先,如果读写同时等待,那优先唤醒写

缺点:手动释放锁

 

同步集合、并发集合

同步集合:HashTable、Vector、Collections中的同步方法

并发集合:ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteHashSet

 

Volatile

 

不变类

 

 

 

什么时候会出死锁

 

两个线程同时占有对方要的资源

如:

线程1有资源A,要资源B

线程2有资源B,要资源A

 

死锁发生的条件:

互斥条件:一个资源每次只能被一个进程使用。

请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

 

解决方法:

有序资源分配法

银行家算法

 

 

 

如何控制线程

 

闭锁、栅栏、信号量

join控制线程有序进行

 

 

 

项目中用到哪些

 

信号量、线程池

 

 

 

如果同步块内的线程抛出异常会发生什么?

 

无论你的同步块是正常还是异常退出的,里面的线程都会释放锁;至于Lock就要在finally中释放锁

 

 

 

wait()和sleep()的区别

 

wait() 释放锁,sleep() 不释放锁

wait() 要notify() 或 notifyAll() 才有机会获得锁,sleep() 一段时间后,自动继续

 

 

http://www.importnew.com/12773.html

 

分享到:
评论

相关推荐

    多线程面试题

    本文将围绕“多线程面试题”这一主题,深入探讨相关概念、技术及其应用。 1. **线程的概念**:线程是程序执行的最小单位,一个进程可以有多个线程同时执行任务,提高了程序的运行效率。 2. **Java中的线程创建方式...

    java多线程面试题和答案

    以下是一些关于Java多线程的面试题及其答案,涵盖了基础概念、并发控制、线程安全以及性能优化等方面。 1. **什么是Java多线程?** 多线程是指在单个程序中同时执行多个线程,这样可以提高应用程序的效率和响应...

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

    了解这些核心概念后,开发者可以更好地应对Java多线程面试中可能出现的问题,同时也能在实际项目中灵活运用多线程技术,提升程序性能。多线程编程虽然复杂,但掌握好相关的工具和原理,就能有效地解决并发问题,编写...

    java经典多线程面试题

    以下是一些经典的多线程面试题知识点: 1. Java中的线程状态有哪些? - 新建状态(New):线程对象创建后,但尚未启动。 - 就绪状态(Runnable):处于就绪状态的线程随时可能被CPU调度执行。 - 运行状态...

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 Spring面试题 Spring Boot面试题 Spring Cloud面试题 RabbitMQ面试题 Dubbo 面试题 MyBatis 面试题 ZooKeeper 面试题 数据结构...

    java多线程面试题59题集合

    以下是对Java多线程面试题59题集合中可能涉及的一些关键知识点的详细解析。 1. **线程的创建方式** - 继承Thread类:创建一个新的类,该类继承自Thread类,并重写其run()方法。 - 实现Runnable接口:创建一个实现...

    Java多线程经典面试题68问

    以上只是Java多线程面试题的一部分,实际面试中可能还会涉及线程通信、线程中断、线程优先级、线程局部变量、并发工具类等内容。理解和熟练掌握这些知识点对于成为一名优秀的Java开发者至关重要。

    java面试题_多线程(68题).pdf

    Java中的多线程是面试中常见的话题,涵盖了操作系统的基础概念以及Java并发库的高级特性。...了解这些概念有助于深入理解Java多线程编程,它们在面试中常常作为考察点,对于开发高效、可靠的并发应用程序至关重要。

    JAVA并发多线程的面试问题及答案-java多线程并发面试题.docx

    JAVA并发多线程面试问题及答案 JAVA并发多线程是Java技术面试中面试官比较喜欢问的问题之一。在这里,我们将从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题...

    java多线程相关面试题 1

    Java 多线程相关面试题总结 Java 多线程相关面试题是一组常见的 Java 面试题,涵盖了 Java 多线程编程的基础知识和高级概念。本文将对这些问题进行详细的解释和分析,帮助读者更好地理解 Java 多线程编程。 1. 为...

    Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题

    Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、SpringBoot面试题、SpringCloud面试题、MyBatis面试题、Mysql面试题、VUE面试题、算法面试题、运维面试题。 收集汇总各行业笔试or编程题解题思路 ...

    java多线程面试题

    以上知识点涵盖了多线程编程在Java中的基础理论和实际操作,包括线程的创建、运行、异常处理以及线程安全等问题,这些都是在进行Java多线程面试时常见的问题,对于理解和掌握Java多线程编程至关重要。

    java面试题之多线程.pdf

    Java中的多线程是面试中常见的话题,因为它在并发编程中扮演着重要角色。线程允许应用程序同时执行多个任务,从而提高系统效率和响应性。理解线程的概念、创建方式以及状态转换对于Java开发者至关重要。 1. **线程...

    热门Java面试多线程面试题问答Top50共17页.pdf

    【标题】"热门Java面试多线程面试题问答Top50共17页.pdf" 提供了一份关于Java多线程面试的重要资源,涵盖了面试中可能会遇到的50个关键问题和答案,共计17页。这表明该文档深入探讨了Java编程中的并发处理和线程管理...

    【面试资料】-(机构内训资料)Java多线程面试59题(含答案)_.zip

    这份"【面试资料】-(机构内训资料)Java多线程面试59题(含答案)_"的压缩文件包含了59个关于Java多线程的面试问题及解答,可以帮助我们深入理解并掌握这一主题。下面,我们将详细探讨其中可能涵盖的一些核心知识点...

    2023最新JAVA面试题集

    多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 35道 BTA 常问的 Java基础39道常见面试题及详细答案 Dubbo面试题 47道 ElasticSearch面试题 30道 Git常用...

    Java 多线程面试题.one

    Java 多线程面试题.one

Global site tag (gtag.js) - Google Analytics