多线程(一)
进程和线程
-
进程作为资源分配的基本单位
-
线程作为资源调度的基本单位,是程序的执行单元,执行路径(单线程:一条执行路径,多线程:多条执行路径)。是程序使用CPU的最基本单位
线程有3个基本状态:
-
执行、就绪、阻塞
线程有5种基本操作:
-
派生、阻塞、激活、 调度、 结束
并行:
-
并行性是指同一时刻内发生两个或多个事件。
-
并行是在不同实体上的多个事件
并发:
-
并发性是指同一时间间隔内发生两个或多个事件。
-
并发是在同一实体上的多个事件
由此可见:并行是针对进程的,并发是针对线程的
创建多线程
-
继承Thread,重写run方法
-
实现Runnable接口,重写run方法
run()和start()方法区别:
-
run()
:仅仅是封装被线程执行的代码,直接调用是普通方法 -
start()
:首先启动了线程,然后再由jvm去调用该线程的run()方法。
jvm虚拟机的启动是单线程的还是多线程的?
-
是多线程的。不仅仅是启动main线程,还至少会启动垃圾回收线程的。
既然有两种方式实现多线程,我们使用哪一种???
一般我们使用实现Runnable接口
-
可以避免java中的单继承的限制
-
应该将并发运行任务和运行机制解耦,因此我们选择实现Runnable接口这种方式
守护线程
守护线程是为其他线程服务的
-
垃圾回收线程就是守护线程~
守护线程有一个特点:
-
当别的用户线程执行完了,虚拟机就会退出,守护线程也就会被停止掉了。
-
也就是说:守护线程作为一个服务线程,没有服务对象就没有必要继续运行了
使用线程的时候要注意的地方
-
在线程启动前设置为守护线程,方法是
setDaemon(boolean on)
-
使用守护线程不要访问共享资源(数据库、文件等),因为它可能会在任何时候就挂掉了。
-
守护线程中产生的新线程也是守护线程
-
守护线程可以自己退出,非守护线程只能手动退出,所以垃圾回收是守护线程,因为需要回收完之后自己退出,然后退出JVM