有几天没有写一写博客了,今天就带给你们一些面试题和参考答案吧!html
这些都是上海尚学堂Java培训的学员去面试时遇到的问题,今天总结出来的是Java线程相关类的面试题。把参考答案和解析也发布出来,供你们学习参考。java
(1)线程是CPU独立运行和独立调度的基本单位;
(2)进程是资源分配的基本单位;是执行着的应用程序
二者的联系:进程和线程都是操做系统所运行的程序运行的基本单元。
区别:
(1)进程具备独立的空间地址,一个进程崩溃后,在保护模式下不会对其它进程产生影响。
(2)线程只是一个进程的不一样执行路径,线程有本身的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。面试
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程能够有多个线程。线程又叫作轻量级进程。多线程
进程是资源分配的最小单位,线程是程序执行的最小单位。并发
进程有本身的独立地址空间,每启动一个进程,系统就会为它分配地址空间,创建数据表来维护代码段、堆栈段和数据段,这种操做很是昂贵。而线程是共享进程中的数据的,使用相同的地址空间,所以CPU切换一个线程的花费远比进程要小不少,同时建立一个线程的开销也比进程要小不少。框架
线程之间的通讯更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通讯须要以通讯的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。学习
可是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另一个进程形成影响,由于进程有本身独立的地址空间。this
有三种方式能够用来建立线程:spa
继承Thread类操作系统
实现Runnable接口
应用程序可使用Executor框架来建立线程池
实现Runnable接口这种方式更受欢迎,由于这不须要继承Thread类。在应用设计中已经继承了别的对象的状况下,这须要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是很是高效的,很容易实现和使用。
线程在执行过程当中,能够处于下面几种状态:
就绪(Runnable):线程准备运行,不必定立马就能开始执行。
运行中(Running):进程正在执行线程的代码。
等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。
睡眠中(Sleeping):线程被强制睡眠。
I/O阻塞(Blocked on I/O):等待I/O操做完成。
同步阻塞(Blocked on Synchronization):等待获取锁。
死亡(Dead):线程完成了执行。
在Java语言中,每个对象有一把锁。线程可使用synchronized关键字来获取对象上的锁。synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,可以保证在同一时刻最多只有一个线程执行该段代码。
(1)、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程获得执行。另外一个线程必须等待当前线程执行完这个代码块之后才能执行该代码块。
(2)、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另外一个线程仍然能够访问该object中的非synchronized(this)同步代码块。
(3)、尤为关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其余线程对object中全部其它synchronized(this)同步代码块的访问将被阻塞。
(4)、第三个例子一样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就得到了这个object的对象锁。结果,其它线程对该object对象全部同步代码部分的访问都被暂时阻塞。
(5)、以上规则对其它对象锁一样适用。
监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每个监视器都和一个对象引用相关联。线程在获取锁以前不容许执行同步代码。
两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。
使用多线程的时候,一种很是简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。所以,若是全部的线程都是以一样的顺序加锁和释放锁,就不会出现死锁了。
以上就是Java线程类常见的面试题和答案,Java线程也是面试必考的重点内容。上海java培训在此就着重讲述这些知识要点。
更多Java线程相关文章阅读推荐:
《Java面试题解析,Java面试必考知识点》
《Java多线程的使用_上海java培训》
《Java进程和Java多线程的概念和优势_上海java培训》
《Java多线程实现的四种方式以及优缺点_上海java培训》
《【上海java培训】Hibernate的悲观锁和乐观锁两种锁机制》