链接:
目录:
<>
<>
内容待整理:
多线程引入
概述
多线程:
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间。
线程:进程中的一个执行单元,负责进程中的程序的运行,一个进程中至少要有一个线程。
多线程程序:一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
程序启动了多线程,有什么应用呢?可以实现多部分程序同时执行,专业术语:“并发”
多线程运行原理
多线程的使用需要合理使用CPU资源,线程过多会导致降低性能。
CPU处理程序时是通过快速切换完成的,在我们看来好像随机一样(其实有自己的规律)
多线程的创建
主线程的运行方式
主线程:
在之前的代码中,JVM启动后,必然有一个执行路径(线程)从main方法开始,一直执行到main方法结束。
这个线程在java中称为主线程。
问题分析:
当主线程在这个程序中执行时,如果遇到了循环而导致在指定位置停留时间过长,无法执行下面的程序。
可不可以实现一个主线程负责执行其中一个循环,由另一个线程负责其他代码的执行,实现多部分的代码同时执行。
这就是多线程技术可以解决的问题。
多线程的创建:
通过API中的英文Thread的搜索(实在搜不到先去百度搜中文),查到了Thread类
通过阅读Thread类中的描述
多线程的创建一:继承Thread类
步骤:
1.1 定义一个类继承Thread。
1.2 重写run方法。
1.3 创建子类对象,就是创建线程对象。
1.4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。
面试:线程对象调用run方法和调用start方法的区别?
调用run方法不开启线程,并让JVM调用run方法,在开启的线程中执行
调用start方法开启线程,并让JVM调用run方法在开启的线程中执行。
原理:继承Thread类的原理
继承Thread类:
因为Thread类描述线程事物,具备线程应有的功能。
那为什么不直接创建Thread类的对象呢?
Thread t1 = new Thread();
t1.start();
这么做没有错,但该start调用的是Thread类中的run方法
而这个run方法没有做什么事情,更重要的是,这个run方法中没有定义我们需要让线程执行的代码。
创建线程的目的是什么?
为了建立单独的执行路径,让多部分代码实现同时执行。
也就是说,线程创建并执行需要给定的代码(专业术语:线程的任务)。