1. 进程和线程的区别
- 进程是资源分配的基本单位;线程是任务调度执行的基本单位;
- 进程的创建和销毁消耗的资源都比线程要多;
- 多个进程之间的内存资源是独立的;在一个进程中多个线程之间的内存资源是共享的;
一个进程中包含多个线程,一个线程中包含多个协程。在单线程中有多个协程并发执行,实际上还是串行执行的。
2. 并行和并发的区别
并行是在同一时刻内多条指令在多个处理器中执行,从微观和宏观上看都是并行的;
并发是在同一时刻内只能有一条指令执行,从宏观上是并行的,从微观上是串行的,只是把时间分成若干段,使每个进程之间快速交替执行。
3. Java 中怎么创建线程
- 继承 Thread 类,重写 run 方法(run中逻辑就是线程要执行的工作,只有当子类实例化,调用start方法时,才可以真正创建线程)
- 实现 Runnable 接口,重写 run 方法(创建了Runnable实例,将runnable实例作为参数传给线程,将线程要干的工作 和 线程本身 分开,使用Runnable来专门表示“线程要完成的工作”,这种方法的好处是,降低了耦合性,如果以后要修改代码,改动相对较少,只需要将修改后的Runnable传给其他的实体就可以了)
- 使用匿名内部类实现(创建Thread子类的方式或实现Runnable接口的方法)
- 实现 Callable 接口,并结合 Future 实现(很少用)
-
通过线程池创建线程(创建 Runnable 的实现类,重写 run 方法,然后创建一个拥有固定线程数的线程池,最后通过 ExecutorService 对象的 execute 方法传入线程对象)
4. 常见操作线程的方法
- 启动线程:start
- 中断线程:isInterrupted(线程中断,本质上是让run方法尽快结束,而不是run执行一半,强制结束