线程

  • 进程

进程是指运行中的程序,比如我的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方法,并不能执行线程;

 

posted @ 2022-01-02 20:19  打翻你的奶瓶  阅读(136)  评论(0)    收藏  举报