一 、线程的特点
-
进程是资源分配的最小单位
-
一个进程可以有多个线程
-
线程共享进程资源
二、创建线程的方式
-
继承Thread类
-
实现Runnable接口
三 、线程的生命周期
1.线程的状态
-
创建状态:线程创建时处于的状态,在线程实例调用start()方法前线程都处于创建状态。
-
就绪状态:当线程调用start()后线程处于就绪状态,在可运行线程池,等待获取cpu的使用权。
-
运行状态:当线程获取到cpu时间片后,就进入运行转态,运行run()方法。
-
阻塞状态:
-
等待阻塞:运行状态的线程调用wait ()方法,线程进入对象等待池。
-
同步阻塞:线程获取同步锁失败。
-
其他阻塞:线程调用sleep () / join () / 发出io请求时线程进入阻塞状态,当这写方法执行结束后线程重新进入就绪状态。
-
-
死亡转态:run ()方法正常结束、线程异常退出、调用stop ()方法
2.线程基本方法
-
wait() 让线程进入阻塞状态,释放锁,等待其他线程唤醒。
-
sleep() 强制一个线程睡眠指定时间,进入阻塞状态,不会释放当前锁与资源。
-
yield() 让当前线程让出cpu时间片,与其他线程一起重新竞争cpu时间片。
-
join() 将调用线程挂起,等其他线程执行结束后执行。
-
notify() / notifyAll () 唤醒指定线程 / 唤醒全部线程。
-
isAlive() 判断一个线程是否存活。
-
currentThread() 获取当前线程。
-
setPriority() 设置线程的优先级。
-
isDaemon() 判断线程是否是守护线程