Java开发岗位面试题归类汇总六:多线程

标签: 线程
8人阅读 评论(0) 收藏 举报
分类:

1Java创建线程之后,直接调用start()方法和run()的区别

答:start()用来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。

若直接调用run(),它只是类的一个普通方法而已,程序中依然只有主线程这一个线程,就跟执行一个普通方法一样。

run()方法必须是public访问权限,返回值类型为void.。

2、常用的线程池模式以及不同线程池的使用场景

答:参考http://dev.yesky.com/433/34834433.shtml

3newFixedThreadPool此种线程池如果线程数达到最大值后会怎么办,底层原理。

答:参考:http://www.mamicode.com/info-detail-1085507.html

4、多线程之间通信的同步问题,synchronized锁的是对象,衍伸出和synchronized相关很多的具体问题,例如同一个类不同方法都有synchronized锁,一个对象是否可以同时访问。(互斥的)或者一个类的static构造方法加上synchronized之后的锁的影响。

答:一个类不同方法都有synchronized锁,是互斥的,synchronized可以修饰static方法,但是这是锁的对象时整个类。http://www.2cto.com/kf/201209/152881.html

5、了解可重入锁的含义,以及ReentrantLocksynchronized的区别

答:synchronized可以修饰一个代码块和给对象上锁;

参考:https://my.oschina.net/u/2250599/blog/410585

6、同步的数据结构,例如concurrentHashMap的源码理解以及内部实现原理,为什么他是同步的且效率高

答:参考:http://blog.csdn.net/liuzhengkang/article/details/2916620,表、桶、节点

7atomicintegervolatile等线程安全操作的关键字的理解和使用

答:volatile不具备原子性,主要讲volatile和synchronized的差别。参考http://www.blogjava.net/hello-yun/archive/2012/12/01/392334.html

8、线程间通信,waitnotify

答:调用yield和sleep并没有释放锁,而调用wait则释放锁。可以通过notify()/notifyAll(),或者时间到期,从wait()中恢复执行。http://zhangjunhd.blog.51cto.com/113473/71387/

9、定时线程的使用

答:主要涉及到两个类,一个是java.util.Timer,一个是java.util.TimerTask。Timer:是一种工具,用Timer操作线程,可以在后台执行线程中的任务,可以控制这个任务执行一次,或者定期重复执行。TimerTask就是Timer需要安排的任务。

10、场景:在一个主线程中,要求有大量(很多很多)子线程执行完之后,主线程才执行完成。多种方式,考虑效率。

答:参考:http://www.jb51.net/article/96842.htm,方法一:设置一个集合,将所有的线程放到list集合中,判断集合是否还有元素,方法二:设置计数器进行- - 操作;方法三:使用java.util.concurrent.CountDownLatch代替MyCountDown,用await()方法代替while(true){...}

11、进程和线程的区别

答:线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:

(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;

(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源

(3)线程是处理器调度的基本单位,但进程不是.

4)二者均可并发执行.

12、什么叫线程安全?举例说明

答:如果你的代码所在的进程中有多个线程同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他变量的值也和预期一样,我们就说是线程安全。线程安全问题都是由全局变量和静态变量引起的。

13、线程的几种状态

答:新建,就绪,运行,阻塞,死亡;

新建:当使用new操作创建一个线程

就绪:调用了start(),线程分配cpu以外的全部资源,等待获得cpu调度

运行:线程获得cpu,开始真正执行run()方法

阻塞:正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。有以下的几种原因:

1、线程调用sleep()方法

2、线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;

3、线程试图得到一个锁,而该锁正被其他线程持有;

4、线程在等待某个触发条件;

死亡:正常退出或者一个异常结束stop()、interrupt或者设置标志位

14、并发、同步的接口或方法

答:参考:http://blog.csdn.net/woshisap/article/details/43119569

15HashMap是否线程安全,为何不安全。ConcurrentHashMap,线程安全,为何安全。底层实现是怎么样的。

答:不是线程安全地。当多个线程同时操作同一个数组位置的时候,也都会先取得现在状态下该位置存储的头结点,然后各自去进行计算操作,之后再把结果写会到该数组位置去,其实写回的时候可能其他的线程已经就把这个位置给修改过了,就会覆盖其他线程的修改。

    参考:http://www.jb51.net/article/96842.htm

16J.U.C下的常见类的使用。 ThreadPool的深入考察; BlockingQueue的使用。(takepoll的区别,putoffer的区别);原子类的实现。

17、简单介绍下多线程的情况,从建立一个线程开始。然后怎么控制同步过程,多线程常用的方法和结构

答:参考:http://developer.51cto.com/art/201509/490965.htm

18volatile的理解

答:.volatile关键字为域变量的访问提供了一种免锁机制

b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新

c.因此每次使用该域就要重新计算,而不是使用寄存器中的值

d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量

19、实现多线程有几种方式,多线程同步怎么做,说说几个线程里常用的方法

答:常用的有两种方式:实现Runnable接口和继承Thread类。

多线程同步有以下的几种方式,使用synchronized、特殊域变量volatile、重入锁ReentrantLock()、使用局部变量

start(); 表示该线程处于活动的,可以抢时间片的状态,而不是开始运行。

interrupt(); 表示将线程对象中断。如果该线程正处于sleep状态,会抛出异常(最好不用,不如让run方法完成执行)

stop(); 表示将线程直接终止。(已过时,不安全,如果有正在打开的资源无法关闭,而线程直接被关闭)。

sleep(); 表示该语句写在那个线程中表示要将当前线程睡眠。

只能在同步控制方法或同步块中调用wait()notify()notifyAll()

查看评论

Java开发岗位面试题归类汇总三:Java Web

1、session和cookie的区别和联系,session的生命周期,多个服务部署时session管理 答:区别和联系     1、session和cookie都是跟踪用户的整个会话     2、s...
  • Love_Taylor
  • Love_Taylor
  • 2017-03-18 20:38:45
  • 748

Java开发岗位面试题归类汇总一:Java基础

Java开发岗位面试题归类汇总,在微博看到的一篇文章,只有问题,没有答案,我具体写了一下每个问题大致的参考答案,仅供参考 一、Java基础 1、String类为什么是final的     答:主...
  • Love_Taylor
  • Love_Taylor
  • 2017-03-13 17:17:47
  • 2165

Java开发岗位面试题归类汇总

java面试知识汇总
  • skymouse2002
  • skymouse2002
  • 2016-03-10 14:10:15
  • 813

Java开发岗位面试题归类

一、Java基础 1、String类为什么是final的。 2、HashMap的源码,实现原理,底层结构。 3、说说你知道的几个Java集合类:list、set、qu...
  • w369033345
  • w369033345
  • 2016-08-11 22:55:21
  • 558

Java开发岗位面试题归类汇总五:开源框架

1、hibernate和ibatis的区别 答:(1)他们都是开源的O/R框架,对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的...
  • Love_Taylor
  • Love_Taylor
  • 2017-04-04 16:13:00
  • 2410

Java开发岗位面试题归类汇总(一)

Java开发岗位面试题归类汇总,在微博看到的一篇文章,只有问题,没有答案,我具体写了一下每个问题大致的参考答案,仅供参考 一、Java基础 1、String类为什么是final的     答:主...
  • chenshiyang0806
  • chenshiyang0806
  • 2017-11-14 22:16:02
  • 93

Java开发岗位面试题归类汇总八:数据库MySql

1、MySql的存储引擎的不同 答:MySQL中的数据用各种不同的技术存储在文件(或者内存)中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不 同的...
  • Love_Taylor
  • Love_Taylor
  • 2017-04-09 17:18:26
  • 3242

Java开发岗位面试题归类汇总四:JVM

1、Java的内存模型以及GC算法 答:参考:http://blog.csdn.net/ithomer/article/details/6252552 2、jvm性能调优都做了什么 3、介绍JVM中7...
  • Love_Taylor
  • Love_Taylor
  • 2017-03-21 17:04:50
  • 1001

2018Java开发岗位面试题归类

  • 2018年02月26日 14:47
  • 46KB
  • 下载

16年Java开发岗位面试题归类

原文链接:https://buluo.qq.com/p/detail.html?bid=11148&pid=1064765-1467806924&from=grp_sub_obj Java基础...
  • liuxiangke0210
  • liuxiangke0210
  • 2017-03-26 16:38:25
  • 592
    个人资料
    等级:
    访问量: 4万+
    积分: 798
    排名: 6万+
    最新评论