课程回顾:
面向对象
数组
异常
常用类
集合
IO流
今日内容:
进程:应用程序运行时,产生的
独立的应用程序,拥有独立的代码和存储空间
多进程:操作系统可以并发的执行多个进程
线程:进程内部的一条执行路径
多线程:java语言支持程序内部进行多线程开发
进程内部可以有多个线程
线程的作用:
可以分担压力,提高性能
主要用来完成耗时操作
java中线程的创建方式:
1、继承Thread类,并重写run方法
拥有线程类的方法
2、实现Runnable接口,并重写run方法
没有线程类的方法
2种启动方式的区别?
继承Thread:
1、不能再继承其他类
2、操作简单
实现Runnable接口:
1、可以继承
2、保持风格一致
3、操作复杂
4、可以共享数据
线程的启动只能通过start方法,不能通过run方法
注意:线程只有start之后才能参与CPU的抢占,谁能抢到是随机的
如果调用run,那么就相当于调用一个普通类中方法一样,对应线程还是会阻塞
线程抢占CPU是随机的
练习:请创建子线程,完成以下工作:输出1000以内的能被3整除,但是不能被5整除的数字
在主线程输出100句:我要努力
线程的常用方法:
start:启动线程
currentThread:获取当前正在运行的线程
getName:获取线程名称
setName:设置线程名称
isDaemon:验证是否守护线程
setDaemon:设置是否为守护线程
getPriority:获取优先级
setPriority:设置优先级
getState:获取线程状态
join:加入
sleep:睡眠
yield:礼让
用户线程和守护线程:
用户线程:java默认创建的饿线程都是用户线程,不受其他线程的干扰
守护线程:有守护的用户线程,当用户线程结束的时候,对应的守护线程也会跟着结束
isDaemon:验证是否为守护线程
setDaemon:设置是否为守护线程,默认false
优先级:就是线程抢占CPU的概率
优先级高的,抢占CPU的概率更高
反之概率更低
优先级范围:1到10
1最低,10最高
MAX_PRIORITY:最大优先级
MIN_PRIORITY:最小优先级
NORM_PRIORITY:默认的优先级
setPriority:设置优先级
getPriority:获取优先级
优先级的故事:
CPU---皇帝
皇后:10
贵妃:7
嫔妃:5
贵人:3
丫鬟:1
线程调度:可以修改线程状态的方法
1、sleep:睡眠,休眠
静态方法,让当前线程由运行进入到阻塞,直到休眠时间结束才进入就绪参与CPU的抢夺
这种引起的阻塞不会释放资源,但是会释放CPU的所属权
2、join:加入,插入
对象方法
在A线程中调用B线程的join方法,带来的效果:
A线程会进入到阻塞,直到B线程执行完成以后,A线程才能进入就绪参与CPU的抢夺
3、yield:礼让,释放
静态方法
让当前正在运行的线程释放CPU(运行变为就绪),此时所有就绪状态的线程共同抢占CPU
线程生命周期:就是线程的状态
1、新建--New
2、就绪--RUNNBABLE
3、运行--RUNNING
4、阻塞--BLOCKED\WAITING\TIMED_WATITING
5、死亡--TERMINATED
只有处于就绪状态的线程,才可以参与CPU的抢夺
getState:获取线程的状态
枚举:一种数据类型,一种特殊的类
可以将同种类型的数据,定义造枚举中,用作新的数据类型使用
enum
格式:修饰符 enum 枚举名{
枚举值,枚举值,……;
}
枚举可以使用在switch
java扩展之定时器:Timer
可以重复或延迟执行一些事情
常用方法:
schedule:计划
参数说明:
第一个参数:TimerTask抽象类,需要继承并重写run方法,规定需要重复或延迟执行的事情
第二个参数:延迟的时间,单位毫秒
第三个参数:重复执行的间隔,单位毫秒
cancel:取消
明天:线程安全
面向对象
数组
异常
常用类
集合
IO流
今日内容:
进程:应用程序运行时,产生的
独立的应用程序,拥有独立的代码和存储空间
多进程:操作系统可以并发的执行多个进程
线程:进程内部的一条执行路径
多线程:java语言支持程序内部进行多线程开发
进程内部可以有多个线程
线程的作用:
可以分担压力,提高性能
主要用来完成耗时操作
java中线程的创建方式:
1、继承Thread类,并重写run方法
拥有线程类的方法
2、实现Runnable接口,并重写run方法
没有线程类的方法
2种启动方式的区别?
继承Thread:
1、不能再继承其他类
2、操作简单
实现Runnable接口:
1、可以继承
2、保持风格一致
3、操作复杂
4、可以共享数据
线程的启动只能通过start方法,不能通过run方法
注意:线程只有start之后才能参与CPU的抢占,谁能抢到是随机的
如果调用run,那么就相当于调用一个普通类中方法一样,对应线程还是会阻塞
线程抢占CPU是随机的
练习:请创建子线程,完成以下工作:输出1000以内的能被3整除,但是不能被5整除的数字
在主线程输出100句:我要努力
线程的常用方法:
start:启动线程
currentThread:获取当前正在运行的线程
getName:获取线程名称
setName:设置线程名称
isDaemon:验证是否守护线程
setDaemon:设置是否为守护线程
getPriority:获取优先级
setPriority:设置优先级
getState:获取线程状态
join:加入
sleep:睡眠
yield:礼让
用户线程和守护线程:
用户线程:java默认创建的饿线程都是用户线程,不受其他线程的干扰
守护线程:有守护的用户线程,当用户线程结束的时候,对应的守护线程也会跟着结束
isDaemon:验证是否为守护线程
setDaemon:设置是否为守护线程,默认false
优先级:就是线程抢占CPU的概率
优先级高的,抢占CPU的概率更高
反之概率更低
优先级范围:1到10
1最低,10最高
MAX_PRIORITY:最大优先级
MIN_PRIORITY:最小优先级
NORM_PRIORITY:默认的优先级
setPriority:设置优先级
getPriority:获取优先级
优先级的故事:
CPU---皇帝
皇后:10
贵妃:7
嫔妃:5
贵人:3
丫鬟:1
线程调度:可以修改线程状态的方法
1、sleep:睡眠,休眠
静态方法,让当前线程由运行进入到阻塞,直到休眠时间结束才进入就绪参与CPU的抢夺
这种引起的阻塞不会释放资源,但是会释放CPU的所属权
2、join:加入,插入
对象方法
在A线程中调用B线程的join方法,带来的效果:
A线程会进入到阻塞,直到B线程执行完成以后,A线程才能进入就绪参与CPU的抢夺
3、yield:礼让,释放
静态方法
让当前正在运行的线程释放CPU(运行变为就绪),此时所有就绪状态的线程共同抢占CPU
线程生命周期:就是线程的状态
1、新建--New
2、就绪--RUNNBABLE
3、运行--RUNNING
4、阻塞--BLOCKED\WAITING\TIMED_WATITING
5、死亡--TERMINATED
只有处于就绪状态的线程,才可以参与CPU的抢夺
getState:获取线程的状态
枚举:一种数据类型,一种特殊的类
可以将同种类型的数据,定义造枚举中,用作新的数据类型使用
enum
格式:修饰符 enum 枚举名{
枚举值,枚举值,……;
}
枚举可以使用在switch
java扩展之定时器:Timer
可以重复或延迟执行一些事情
常用方法:
schedule:计划
参数说明:
第一个参数:TimerTask抽象类,需要继承并重写run方法,规定需要重复或延迟执行的事情
第二个参数:延迟的时间,单位毫秒
第三个参数:重复执行的间隔,单位毫秒
cancel:取消
明天:线程安全