一 线程和进程
1 进程(Process):正在运行的程序
2 线程(Thread):进程中的一个任务,必须包含在进程中,进程是线程的容器
3 一个进程中至少得包含一个线程,包含一个线程的进程叫单线程进程,包含两个或两个以上线程的进程叫多线程进程
4 线程的作用:使用多线程是为了让多任务并行
5 线程的状态:
(1)出生状态(born):线程刚new完的状态
(2)就绪状态(ready):实例化线程会使线程处于就绪状态,但不会执行线程中的代码
(3)运行状态(run):调用线程的start方法会启动线程,将其变为执行状态
(4)阻塞状态(block):由线程挂起、线程休眠、线程等待而引起的状态,不是一直都有
(5)死亡状态(dead):run方法执行结束时,线程终止
6 创建线程的方法:
(1)继承Thread类
(2)实现Runnable接口
7 关闭进程时,一定先关闭所有进程的线程,即进程要等到所有线程都终止运行后才结束
8 线程具有优先级,但不绝对改变线程的完成效率
9 main函数执行时所属的线程称为主线程
二 守护线程
1 守护线程:不影响进程的退出,是一直运行的程序
三 线程安全和非线程安全
1 线程安全:多线程并行时得到的结果是期望值时,称线程安全
2 非线程安全:多线程并行时得到的结果有一个不是期望值时,称非线程安全
3 出现非线程安全的原因:多个线程操作同一资源
4 保证线程安全的方法:
(1)同步方法:在方法声明时添加关键字synchronized为多线程访问的方法加锁,使得同时只允许一个线程执行方法中的代码,其他线程处于等待状态
(2)同步块:同步块用于包含加锁的语句,一个线程执行到同步块时,会对同步对象加锁,然后执行同步块中的语句,其他线程执行到同步块时,进入等待状态
5 同步块和同步方法
(1)同步方法同一时刻只允许一个线程访问,一个对象就是钥匙,静态方法的钥匙是类名,实例方法的钥匙是调用该方法的对象名
(2)同步块可以以任意一个字符作为钥匙,或者以类名.class作为钥匙
6 类名.class:获取该类在方法区中的源代码,源代码在方法区中只加载一次
一个类首次加载时,首先加载类的源代码到方法区,然后运行静态属性、静态块
四 相关类
1 Thread类:用于创造线程,操作线程的方法
2 Timer类:线程类,对线程的封装,封装定时器
五 相关方法
(1)start():启动线程
(2)sleep():为当前线程指定时间休眠,线程休眠不占用CPU资源
(3)run():该方法中的代码会在线程启动的时候执行
(4)setDaemon():设置该线程为守护状态,该线程是否运行不影响进程的结束
(5)mkdir():创建当前目录
(6)mkdirs():创建当前目录和字目录
(7)setPriority():修改线程优先级状态
1 进程(Process):正在运行的程序
2 线程(Thread):进程中的一个任务,必须包含在进程中,进程是线程的容器
3 一个进程中至少得包含一个线程,包含一个线程的进程叫单线程进程,包含两个或两个以上线程的进程叫多线程进程
4 线程的作用:使用多线程是为了让多任务并行
5 线程的状态:
(1)出生状态(born):线程刚new完的状态
(2)就绪状态(ready):实例化线程会使线程处于就绪状态,但不会执行线程中的代码
(3)运行状态(run):调用线程的start方法会启动线程,将其变为执行状态
(4)阻塞状态(block):由线程挂起、线程休眠、线程等待而引起的状态,不是一直都有
(5)死亡状态(dead):run方法执行结束时,线程终止
6 创建线程的方法:
(1)继承Thread类
(2)实现Runnable接口
7 关闭进程时,一定先关闭所有进程的线程,即进程要等到所有线程都终止运行后才结束
8 线程具有优先级,但不绝对改变线程的完成效率
9 main函数执行时所属的线程称为主线程
二 守护线程
1 守护线程:不影响进程的退出,是一直运行的程序
三 线程安全和非线程安全
1 线程安全:多线程并行时得到的结果是期望值时,称线程安全
2 非线程安全:多线程并行时得到的结果有一个不是期望值时,称非线程安全
3 出现非线程安全的原因:多个线程操作同一资源
4 保证线程安全的方法:
(1)同步方法:在方法声明时添加关键字synchronized为多线程访问的方法加锁,使得同时只允许一个线程执行方法中的代码,其他线程处于等待状态
(2)同步块:同步块用于包含加锁的语句,一个线程执行到同步块时,会对同步对象加锁,然后执行同步块中的语句,其他线程执行到同步块时,进入等待状态
5 同步块和同步方法
(1)同步方法同一时刻只允许一个线程访问,一个对象就是钥匙,静态方法的钥匙是类名,实例方法的钥匙是调用该方法的对象名
(2)同步块可以以任意一个字符作为钥匙,或者以类名.class作为钥匙
6 类名.class:获取该类在方法区中的源代码,源代码在方法区中只加载一次
一个类首次加载时,首先加载类的源代码到方法区,然后运行静态属性、静态块
四 相关类
1 Thread类:用于创造线程,操作线程的方法
2 Timer类:线程类,对线程的封装,封装定时器
五 相关方法
(1)start():启动线程
(2)sleep():为当前线程指定时间休眠,线程休眠不占用CPU资源
(3)run():该方法中的代码会在线程启动的时候执行
(4)setDaemon():设置该线程为守护状态,该线程是否运行不影响进程的结束
(5)mkdir():创建当前目录
(6)mkdirs():创建当前目录和字目录
(7)setPriority():修改线程优先级状态