Java—初始多线程
多线程的理解
进程:
进程是程序的基本执行实体
每一个运行的软件都是一个进程
线程:
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
简单理解:应用软件中互相独立,可以同时运行的功能
同时运行的程序比较多就形成了多线程
多线程:可以提高程序的运行效率。
总结:
1.什么是多线程?
有了多线程,我们就可以让程序同时做多件事情
2.多线程的作用?
提高效率
3.多线程的应用场景?
只要你想让多个事情同时运行就需要用到多线程
比如:软件中的耗时操作、所有的聊天软件、所有的服务器
多线程的俩个概念并发和并行
并发:在同一时刻,有多个指令在单个CPU上交替执行
举例理解:就像我们一边打游戏,一边吃东西,一边喝水一样,我们的打游戏喝水吃东西都是一个线程。
并行:在同一时刻,有多个指令在多个CPU上同时执行
多线程的实现方式
①继承Thread类的方式进行实现
②实现Runnable接口的方式进行实现
③利用Callable:接口和Future接口方式实现
①继承Thread类的方式进行实现
多线程的第一种启动方式:
1.自己定义个类继承Thread
2.重写run方法
3.创建子类的对象,并启动线程
第一步:自己定义个类继承Thread
第二步:重写run方法
3.创建子类的对象,并启动线程
②实现Runnable接口的方式进行实现
多线程的第二种启动方式:
1.自己定义一个类实现Runnable接口
2.重写里面的run方法
3.创建自己的类的对象
4.创建一个Thread类的对象,并开启线程
③利用Callable:接口和Future接口方式实现
多线程的第三种实现方式:
特点:可以获取到多线程运行的结果
1.创建一个类MyCallable实现callable接口
2.重写call(是有返回值的,表示多线程运行的结果)
3. 创建MyCallable的对象(表示多线程要执行的任务)
4. 创建FutureTask的对象(作用管理多线程运行的结果)
5. 创建Thread类的对象,并启动(表示线程)
多线程三种实现方式对比:
多线程的常用成员方法:
1.String getName() 返回此线程的名称
void setName(String name) 设置线程的名字(构造方法也可以设置名字)
细节:
如果我们没有给线程设置名字,线程也是有默认的名字的
格式:Thread-X(X序号,从0开始的)
- 默认的名字
- setName方法设置名字
- 构造方法设置名字
2.static Thread currentThread() 获取当前线程的对象
细节:
当JVM虚拟机启动之后,会自动的启动多条线程
其中有一条线程就叫做main线程
他的作用就是去调用main方法,并执行里面的代码
在以前,我们写的所有的代码,其实都是运行在main线程当中
3.static void sleep(long time) 让线程休眠指定的时间,单位为毫秒
细节:
1、哪条线程执行到这个方法,那么哪条线程就会在这里停留对应的时间
2、方法的参数:就表示睡眠的时间,单位毫秒
1秒=1000毫秒
3、当时间到了之后,线程会自动的醒来,继续执行下面的其他代码
线程的优先级:
setPriority(int newPriority) 设置线程的优先级
优先级越高先执行完的概率越高,抢占cpu的概率也越高
final int getPriority() 获取线程的优先级
优先级从高到底是10到1如果没有设置优先级默认是5
设置守护线程:
final void setDaemon(boolean on) 设置为守护线程
注意:当非守护线程执行完毕,守护线程也会跟着取消执行。
出让/礼让线程:
public static void yield() 出让线程/礼让线程
这个方法是尽可能的使线程出现的均匀些。
插入\插队线程:
public final void join() 插入线程/插队线程