1 / 29
文档名称:

Java初级工程师面试题精选3.doc

格式:doc   大小:65KB   页数:29页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Java初级工程师面试题精选3.doc

上传人:学习的一点 2021/7/25 文件大小:65 KB

下载得到文件列表

Java初级工程师面试题精选3.doc

文档介绍

文档介绍:Java初级工程师面试题精选3
说明:本面试题大多都是根据《Java面试问题集》、《Java程序员面试宝典》、《程序员面试宝典》等书籍概括精选而来,其中也补充了一些自己在找工作的过程中遇到的面试题,虽然不能遍及Java的所有知识点,但绝对都是面试会问到的高频知识点。
?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
  Java中有三种方法来实现一个线程,分别是继承Thread类、实现Runnable接口、使用ExecutorService,Callable,Future。其中,前两种线程执行完之后没有返回值,最后一种是带返回值的。
  继承Thread:自己的线程类继承Thread,然后创建一个自己线程类的实例,通过实例调用start方法来执行run方法。
Public class MyThread extends Thread {
Public void run() {
...
}
}1234512345
  然后在合适的地方启动线程:
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
();
();12341234
  实现Runnable接口:自己的线程类实现Runnable接口,然后创建一个自己线程类的实例,将实例作为参数构造一个Thread对象,最后通过该Thread对象来调用start方法运行run方法。
Public class MyThread extends Otherclass implements Runnable{
Public void run() {
...
}
}1234512345
  然后在合适的地方启动线程:
MyThread t1 = new MyThread();
Thread thread = new Thread(t1);
();123123
  使用ExecutorService,Callable,Future来实现:可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。
  参考:
  用synchronized关键字来修饰同步方法,表示该方法只能同时被一个线程访问。
  stop方法不安全,suspend方法容易发生死锁。
()和join()和yield()和wait()之间的区别
  首先说下sleep()和yield()的区别:
  1)sleep()必须带参数,yield()不带参数。
  2)sleep()是让当前线程进入sleep状态,时间到了,然后进入就绪态;yield()是直接让当前线程进入就绪态。
  3)sleep()后,所有优先级的其它线程都有机会运行;yield()后,只有相同优先级的线程才有机会执行。
  Tips:sleep()和yield()都不会释放对象锁。
  join()方法是让调用该方法的Thread在完成了run中的代码之后才能执行join后面的代码。比如:
();
();1212
  这样的话,thread1和thread2会同时运行,但是这样:
();
();
();123123
  那么只有当线程thread1完成执行之后才能执行thread2。所以通过join方法可以确保多个线程按照顺序执行。
  wait()方法通常和notify()和notifyAll()方法同时使用。
  这三个方法主要用于协调多个线程对共享数据的存取。必须在synchronized语句块中使用。
  synchronized关键字用于保护共享数据,阻止其他线程对共享数据的存取,但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。
  wait()方法使当前线程暂停执行并