Java面试题及解析(进程)

1、进程与线程的区别 ?

进程是一个程序的执行(即正在运行的程序), 然而线程是在进程中独立的执行序列; 一个进程可以包含很多线程,线程有时被称为轻量级的进程。

2、线程常用的方法

static Thread currentThread() //静态方法,通过这个方法可以获得主线程的引用,从而达到操作主线程的目的
static int activeCount() //静态方法,获得当前活动线程数量
long getId() //获得当前线程id
String getName() //获得当前线程名字
int getPriority() //获得优先级
boolean isAlive() //当前线程是否处于活动状态
boolean isDaemon() //是否为守护线程
void run() //run()方法,我们用线程,主要就是对run()方法的重写
void start() // 使该线程开始执行;Java 虚拟机调用该线程的run() 方法
void sleep() //使当前线程休眠,以执行其他线程,如Thread.sleep(1000) 休眠1秒

3、创建线程的不同方式, 哪种方式好?

有三种创建线程的方式:继承Thread类、实现Runnable接口、通过Executor框架创建线程池。
前两种方式都要通过重写run()方法来定义线程的行为,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活,且线程池效率很高, 实施起来很简单。

4、进程间通信方式

常见的通信方式:管道、信号、信号量、消息队列、共享内存、套接字(socket)。

5、启动一个线程是调用run()还是start()方法?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行,这并不意味着线程就会立即运行。run()方法是线程启动后要进行回调(callback)的方法。

6、请说出与线程同步以及线程调度相关的方法

wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要处理InterruptedException异常;
notify():唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且与优先级无关;
notityAll():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让它们竞争,只有获得锁的线程才能进入就绪状态。

7、线程的sleep()方法和yield()方法的区别

① sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;
② 线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;
③ sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;
④ sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性。

8、 Sleep()和wait()的区别

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先级;(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

9、Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?

sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态)。
wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。

10、使用线程池的注意事项

(1)防止死锁。线程池中所有线程都在等待A事件发生,而没有空闲线程去执行A。
(2)防止系统资源不足。要控制线程数量。
(3)防止并发错误。
(4)防止线程泄漏,某个线程因RuntimeException或Error没有正常被捕获导致该线程异常终止,线程池失去了一个线程。
(5)避免任务过载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值