进程vs线程:
1.进程是系统分配资源的最小单位;线程是系统调度的最小单位;
2.一个进程中至少要包含一个线程;
3.线程必须要依附于进程,线程是进程实质工作的最小单位。
线程的创建方式:
1.继承Thread类是实现线程的创建线程 (2种写法)
2.实现Runnable接口的方式(3种)
3.实现Callable接口的方式(1种)
创建线程第一类,第一种方式:
创建线程第一类,第2种方式:
继承Thread类的方式的缺点: Java 语言的设计当中只能实现单继承,如果继承了Thread类,也就不能继承其他类。
创建继承第二类:实现Runnable接口的方式(Java不能多继承,但可以实现多个接口 )
实现方法3:
实现方法4(重点):
实现方式5:
第三类,实现方式6:实现Callable
线程休眠:
线程的优先级:
优先级的取值是1-10,这个值越大那么它的(执行)权重就越高。
优先级总结:
优先级越高执行的优先级也越高,执行权也就越大,但是cpu的调度是很复杂的,所以不会严格的按照优先级的排序去执行,但总体来看还是优先级越高执行的权重也就越高。
线程分类:
1.后台线程(守护线程)
2.用户线程【默认线程】
守护线程是用来服务用户线程,用户线程就是上帝,守护线程就是服务员。
进程退出:没有用户线程运行,进程就会结束。
守护线程使用场景:Java垃圾回收器
守护线程的注意事项
1.守护线程设置必须在调用start();
如果设置守护线程在开始线程之后,那么程序就会报错,并且设置的守护线程值不能生效。
2.在守护线程里面创建的线程,默认情况下全部都是守护线程。