线程
- 进程
进程是指运行中的程序,比如我的QQ,就启动了一个进程,操作系统就会为该进程分配内存空间,当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间。 程序----->(运行)----->进程
进程是程序的一次执行程序,或是正在运行的一个程序。是动态过程:有它自身的产生、存在和消亡的过程。
- 线程
线程由进程创建的,是进程的一个实体;一个进程可以拥有多个线程,比如迅雷是一个进程,那么下载多个文件就是多个线程(线程也可以创建多个线程)。
单线程:同一个时刻,只允许执行一个线程;
多线程:同一个时刻,可以执行多个线程,比如:一个QQ进程,可以同时打开多个聊天窗口,一个迅雷进程,可以下载多个文件。
- 并发
同一时刻,多个任务交替执行,造成一种“貌似同时的错觉”,简单的说,单核cpu实现的多任务就是并发
- 并行
同一时刻,多个任务同时执行,多核cpu可以实现并,某个cpu可能(并行中包含并发)同时执行并发和并行。
Runtime runtime = Runtime.getRuntime();
获取当前电脑的cpu数量
int cpuNums = runtime.availableProcessors();
- 创建线程的两种方式;(当一个类继承了 Thread 类, 该类就可以当做线程使用)
继承Thread类(其实也实现了Runnable接口),重写run方法;实现Runnable接口,重写run方法
- 继承Thread类
类名.staet()启动线程;(执行main中的子线程)(实际上staet底层是staer0(),native(本地方法)JVM机调用)

类名.run()(相当于main直接去执行run方法run方法是个普通的方法,没有真正执行线程,如果用run方法执行就会阻塞,只有执行完毕才会向下执行,并不能实现多线程)~~~(!!!!不可以使用)
Thread.sleep(1000)(阻塞)线程休眠1秒
jconsole;可以动态查看线程进行;
Thread.currentThread().getName();获取线程名称
(Application)线程
当main方法启动一个子线程,主线程不会阻塞,会继续执行(子线程与主线程会交替执行、根据分配的时间片(随机时间)至少执行一次程序)当主线程结束执行(执行完),子线程不会中断继续执行直到运行完毕。
(线程也可以创建多个线程)。
- 实现Runnable接口
java是单继承,再某些情况下一个类可能已经继承了某个父类,这时在用继承Thread类方法来创建线程显然不可能了
java设计者提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程
Runnable开启线程需要先创建Thread将运行的线程类名放进去,然后通过Thread的start方法去启动线程
Runnable其实只是重写了run方法,并不能执行线程;

浙公网安备 33010602011771号