Java基础(十八)——线程与进程、多线程(本质、创建方式)、线程的休眠、生命周期、临界资源
一、初识线程与进程
打开任务管理器,即可看到进程
进程:程序执行的j基本单位,程序由一个或者多个进程组成。 线程:线程是 CPU 执行的基本单位,进程是有一个或者多个线程组合合成。
举个例子: 音乐播放器播放音乐的同时还有歌词在滚动。其中,歌词就是一个线程在负责,播放音乐又是另外一个线程在负责。
二、初识多线程
1、多线程的本质
线程是由 CPU 调度执行,多线程是 CPU 不断地来回切换调度不同的线程执行的结果。
2、多线程创建的方式
a、继承
自定义线程类并继承 Thread 类,重写 run()方法。接着实例化自定义类,通过对象调用 start()开启线程:
b、实现 Runnable 接口
自定义任务类并实现 Runnable 接口,重写 run()。实例化自定义任务类,实例化 thread 类并在构造方法中传递任务类的对象,通过 Thread 类对象调用 start()方法开启线程:
c、实现 Callable 接口(了解即可,很少用)
自定义类实现 Callable 接口,重写 call()方法,拥有返回值。
d、通过线程池启动线程
线程池:可以实现线程的重复使用,减少线程的创建和销毁时间。
(1)一条线程的线程池
(2)三(多)条线程的线程池
(3)自带缓冲区的线程池
3、 Thread.sleep(毫秒)——线程的休眠
sleep()可以直接通过 Thread 的类来调用。
4、线程的五种状态(线程的生命周期)
5、临界资源
临界资源:多个线程共享一份数据
问题:下面代码输出结果? 答案是:
因为创建了三条线程,num 这个变量每个对象都有。所以是10。
如果要变成临界资源,就用把这个变量变成静态的:
这样,变量共享了以后,最终结果就是30。
|