并发知识不管在学习、面试还是工作过程中都非常非常重要,看完本文,相信绝对能助你一臂之力。
1、线程和进程有什么区别?
线程是进程的子集,一个进程可以有很多线程。每个进程都有自己的内存空间,可执行代码和唯一进程标识符(PID)。
每条线程并行执行不同的任务。不同的进程使用不同的内存空间(线程自己的堆栈),而所有的线程共享一片相同的内存空间(进程主内存)。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。
2、实现多线程的方式有哪些?
继承Thread类:Java单继承,不推荐;实现Runnable接口:Thread类也是继承Runnable接口,推荐;实现Callable接口:实现Callable接口,配合FutureTask使用,有返回值;使用线程池:复用,节约资源;更多方式可以参考我的文章使用Java Executor框架实现多线程3、用Runnable还是Thread?
这个问题是上题的后续,大家都知道我们可以通过继承Thread类或者调用Runnable接口来实现线程,问题是,那个方法更好呢?什么情况下使用它?这个问题很容易回答,如果你知道Java不支持类的多重继承,但允许你调用多个接口。所以如果你要继承其他类,当然是调用Runnable接口好了。
Runnable和Thread两者最大的区别是Threa