进程其实是在内存中开辟的运行空间。进程直译:正在进行中的程序。
线程:就是进程中负责执行的控制单元。(一条执行路径,什么东西呀!理解名词这么多!)
话说:其实多线程就是CPU在做着快速切换运行程序。
CPU多,内存不够的话没有程序处理!
多线程好处:解决了多部分同时运行的问题。
多线程的弊端:线程太多回到效率的降低。
其实应用程序的执行都是cpu在做着快速的切换完成的。这个切换是随机的。
JVM其实就是一个多线程机制,因为main函数在运行的时候,应该有其他线程在对垃圾进行回收。
每个对象都具备被回收的方法。这个方法是?
垃圾回收器?这个环节单独被一个线程执行
system方法里面有垃圾回收器~!
为什么 Hello World!会先运行呢?因为这是两个线程完成的。。。。。
system.gc 启动垃圾回收器,finalize()就运行。
还没调用进程就结束了。同样的例子,不一样的结果,说明了线程的
不要走误区,认为主线程结束JVM就结束。
JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。
1,执行main函数的线程,
该线程的任务代码都定义在main函数中。
2,负责垃圾回收的线程。
单线程实例,现在想要同时运行,接下来,看看怎么实现。
好吧!解决问题要先找对象,让JAVA去调用WINDOWS底层来实现。
熟悉阅读API文档关键内容。因为要使用嘛。
找到run()方法。
如何创建一个线程呢?
创建线程方式一:继承Thread类。
步骤:
1,定义一个类继承Thread类
2,覆盖Thread类中的run方法(为什么要覆盖呢?)答案:你有任务函数,我有任务内容,所以我要覆盖run方法。
3,直接创建Thread的子类对象创建线程。
4,调用start方法开启线程并调用线程的任务run方法执行。
话说,JAVA已经提供了多线程类,而且是公有的,没有静态,可以new
你有任务函数,我有任务内容,所以我要覆盖run方法。
原来用常规的方法去调用run方法是启动不了多线程的。那就到thread类里面去找方法吧。如下!!
对象.start 意思:开启线程,调用run方法。
调用run与调用start的区别在哪里?
线程有名字,还能获取名字。
可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)
主线程的名字就是main。
注解:线程在创建的时候就完成了名称的定义,
看清楚,是拿到当前对象!
多线程图示,线程中的方法会在自己的线程内出栈进栈,run();方法结束后整个线程也就结束了。
线程出现异常后也都不会相互影响。线程通俗理解:一条线程一条道路,一条道路给淹了,另外的道路还能用!