Java Core 50 个顶级求职面试问题与答案。第二部分
多线程
24. 如何在 Java 中创建新线程?
无论如何,线程会被创建,使用线程类。但有多种方法可以做到这一点......
- 继承java.lang.线程.
- 实现java.lang.Runnable接口——线索类的构造子会接受一个可运行对象。
让我们来谈谈他们每一个。
继承Thread类
在这种情况下,我们让类继承java.lang.线程.它有一个run()这正是我们所需要的。新线程的所有生命力和逻辑都将集中在这个方法中。这有点像主要角色新线索的方法。 之后,剩下的就是创建我们类中的对象并调用开始()方法。这样会创建一个新线程并开始执行其逻辑。让我们来看看:主机输出大致如下:
/** * An example of how to create threads by inheriting the {@link Thread} class. */ class ThreadInheritance extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { ThreadInheritance threadInheritance1 = new ThreadInheritance(); ThreadInheritance threadInheritance2 = new ThreadInheritance(); ThreadInheritance threadInheritance3 = new ThreadInheritance(); threadInheritance1.start(); threadInheritance2.start(); threadInheritance3.start(); } }线索1 线程-0 线索-2
也就是说,即使在这里,线程的执行也不是按顺序执行,而是按照JVM的判断执行:)
实现可运行接口
如果你反对继承和/或已经继承了其他职业,你可以使用java.lang.Runnable接口。 在这里,我们让类通过实现run()方法,就像上面的例子一样。剩下的就是创造线索物品。看起来代码行数越多越糟。但我们知道遗传有多么有害,最好尽量避免;) 看看:结果如下:
/** * An example of how to create threads from the {@link Runnable} interface. * It's easier than easy — we implement this interface and then pass an instance of our object * to the constructor. */ class ThreadInheritance implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { ThreadInheritance runnable1 = new ThreadInheritance(); ThreadInheritance runnable2 = new ThreadInheritance(); ThreadInheritance runnable3 = new ThreadInheritance(); Thread threadRunnable1 = new Thread(runnable1); Thread threadRunnable2 = new Thread(runnable2); Thread threadRunnable3 = new Thread(runnable3); threadRunnable1.start(); threadRunnable2.start(); threadRunnable3.start(); } }线程-0 线索1 线索-2
25. 进程和线程有什么区别?
进程和线程在以下方面有所不同:
- 运行中的程序称为进程,但线程是进程的一部分。
- 进程是独立的,但线程是进程的一部分。
- 进程在内存中有不同的地址空间,但线程共享一个共同的地址空间。
- 线程间的上下文切换比进程间切换更快。
- 进程间通信比线程间通信更慢且成本更高。
- 父进程的任何更改不会影响子进程,但父进程的变化可能影响子进程。
26. 多线程有哪些好处?
- 多线程允许应用程序/程序始终响应输入,即使它已经在运行一些后台任务;
- 多线程使得任务完成速度更快,因为线程独立运行;
- 多线程能更好地利用缓存内存,因为线程可以访问共享的内存资源;
- 多线程减少了所需的服务器数量,因为一台服务器可以同时运行多个线程。
