多线程(一)

进程和线程

  • 进程作为资源分配的基本单位

  • 线程作为资源调度的基本单位,是程序的执行单元,执行路径(单线程:一条执行路径,多线程:多条执行路径)。是程序使用CPU的最基本单位

线程有3个基本状态

  • 执行、就绪、阻塞

线程有5种基本操作

  • 派生、阻塞、激活、 调度、 结束

并行和并发

并行:

  • 并行性是指同一时刻内发生两个或多个事件。

  • 并行是在不同实体上的多个事件

并发:

  • 并发性是指同一时间间隔内发生两个或多个事件。

  • 并发是在同一实体上的多个事件

由此可见:并行是针对进程的,并发是针对线程的

创建多线程

  • 继承Thread,重写run方法

  • 实现Runnable接口,重写run方法

run()和start()方法区别:

  • run():仅仅是封装被线程执行的代码,直接调用是普通方法

  • start():首先启动了线程,然后再由jvm去调用该线程的run()方法。

jvm虚拟机的启动是单线程的还是多线程的?

  • 是多线程的。不仅仅是启动main线程,还至少会启动垃圾回收线程的。

既然有两种方式实现多线程,我们使用哪一种???

一般我们使用实现Runnable接口

  • 可以避免java中的单继承的限制

  • 应该将并发运行任务和运行机制解耦,因此我们选择实现Runnable接口这种方式

守护线程

守护线程是为其他线程服务的

  • 垃圾回收线程就是守护线程~

守护线程有一个特点

  • 当别的用户线程执行完了,虚拟机就会退出,守护线程也就会被停止掉了。

  • 也就是说:守护线程作为一个服务线程,没有服务对象就没有必要继续运行

使用线程的时候要注意的地方

  1. 在线程启动前设置为守护线程,方法是setDaemon(boolean on)

  2. 使用守护线程不要访问共享资源(数据库、文件等),因为它可能会在任何时候就挂掉了。

  3. 守护线程中产生的新线程也是守护线程

  4. 守护线程可以自己退出,非守护线程只能手动退出,所以垃圾回收是守护线程,因为需要回收完之后自己退出,然后退出JVM

原文地址:https://www.cnblogs.com/yjh1995/p/13514619.html