进程:应用程序的执行实例 有独立的内存空间和系统资源
线程:CPU调度和分派的基本单位 进程中执行运算的最小单位,可完成一个独立的顺序控制流程
多线程:在一个进程中同时运行多个线程,用来完成不同的工作
多个线程交替占用CPU资源,而非真正的并行执行
好处:
充分利用CPU的资源
简化编程模型
带来良好的用户体验
主线程:
main()方法即为主线程入口
产生其他子线程的线程
必须最好完成执行,因为它执行各种关闭动作
创建线程的两种方法:
继承Thread类
Runnable接口 的类无法直接start() 需要创建一个Thread 才可以点出来start()
使用线程的步骤
定义线程-创建线程对象-启动线程-终止线程
继承Thread类
编写简单,可直接操作线程
适用于单继承实现
当多个线程共享同一个资源时,一个线程未完成全部操作的时候,其他线程修改的数据,造成数据不安全问题。
线程的状态
创建状态 阻塞状态 死亡状态(自然)
就绪状态 运行状态
setPriority(int newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 等待该线程终止
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
(提供一种可能,但是不能保证一定会实现礼让)
void interrupt() 中断线程
boolean isAlive() 测试线程是否处于活动状态
Synchronized的用法
是一种同步锁
构造方法不能写 但是可以写在方法里面 用静态块来使用
ArrayList类的add()方法为非同步方法
当多个线程同时运行时,会发生错误