java并发面试题(一)基础
多线程
java中有几种方法可以实现一个线程?(参考答案)
答: 1)继承Thread方法:Java线程类也是一个object类,。 可以用如下方式用java中创建一个线程:
Tread thread = new Thread();
执行该线程可以调用该线程的start()方法:
();
2)实现Runnable接口:
public class MyRunnable implements Runnable {
public void run(){
("MyRunnable running");
}
}
Thread thread = new Thread(new MyRunnable());
();
如何停止一个正在运行的线程?
答:使用共享变量的方式:代码中定义了一个退出标志exit,当exit为true时,while循环退出,exit的默认值为false。在定义exit时,使用了一个Java关键字volatile,这个关键字的目的是使
exit同步,也就是说在同一时刻只能由一个线程来修改exit的值。
notify()和notifyAll()有什么区别?
答:void notify(): 唤醒一个正在等待该对象的线程。
void notifyAll(): 唤醒所有正在等待该对象的线程。
两者的最大区别在于:
notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
notify他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。
sleep()和 wait()有什么区别?
答:
这两个方法来自不同的类分别是Thread和Object
最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
sleep()让一个线程休眠一段时间,能自动醒来进入到可运行状态,不会马上进入运行状态,wait()让一个线程等待,直到线程被杀死或被唤醒。
什么是Daemon线程?它有什么意义?
java如何实现多线程之间的通讯和协作?
锁
什么是可重入锁(ReentrantLock)?
当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?
并发编程测试题 来自淘豆网m.daumloan.com转载请标明出处.