Java Thread
3.1 进程和线程的区别是什么?
进程是程序的执行,线程是进程中单独的一个执行序列。进程可以包括多个线程。线程有时候被称为轻量级的进程。
3.2 解释创建线程的不同方法。哪一种是你常用的并解释原因
创建线程有三种方法:
一个类可以即成Thread类
一个类可以实现Runnable接口
一个应用可以使用Executor框架创建线程池
Runnable接口是更推荐的,因为不需要一个对象继承Thread类。如果你的应用需要很多继承,可以使用接口来实现目的。线程池使用和实现起来也非常方便。
3.3 概述可用线程状态
在执行过程中,一个线程具备以下不同的状态:
• Runnable: 线程可运行,但是不必是立即运行
• Running: 处理器正在执行线程代码
• Waiting: 线程阻塞并等待外部处理完成
• Sleeping: 线程被强制休眠
• Blocked on I/O: 等待I/O操作完成
• Blocked on Synchronization: 等待同步锁
• Dead: 线程完成执行
3.4 同步方法和同步块的区别是什么
在java程序中,每个对象都有一个锁。使用synchronized关键字时,线程需要得到对象的锁。synchronized关键字可以被用于方法级(粗粒度的锁)或者代码块级(细粒度的锁)
3.5 在监视器中线程同步如何发生?你可以列举那些不同级别的同步?
jvm在监视器中使用锁避免冲突。监视器一般观察一系列的同步代码,并且保证同意时间直邮一个线程执行同步代码块。每个监视器和一个对象引用相关。线程没有获得锁的之前不被允许执行代码块。
3.6 死锁时什么?
在继续执行前,两个进程互相等待对方的完成,称为死锁。结果就是两个进程持续的等待。
3.7 如何保证n个线程使用n个资源,并不产生死锁?
保证每个线程都按建立的秩序使用锁,可以简单的避免死锁。因此,如果所有的线程加锁或解锁按照同样的顺序,就不会发生死锁。