线程的基础

线程的基础

进程与线程
1.进程可以理解软件的一次执行结果(进程是资源分配合基本单位)
2.线程可以理解为进程的一个片段(处理器调度的基本单位)
3.同一进程中线程共享资源(相同的栈空间)
4.进程和线程都可以并发执行

线程的生命周期
线程的基础_第1张图片
单个线程的周期:新建、就绪、运行、死亡、阻塞
阻塞:就绪的线程使用锁或者标记成临界区会转变成阻塞状态
就绪:线程调用start()方法,是线程状态从新建状态转变成就绪状态。
运行:就绪状态下没有进入临界区的话,线程会调用其run()方法。
实现线程的的两种方式:
a.重写run()
b.实现Runnable借口

线程的基本操作
1.在使用线程中不推荐使用Thread.stop(),因为它会强制释放所有锁,存在数据不一致的风险。
2.如果存在条件触发事件的业务(相对于stop这是一种更加优雅的方式)
Thread.interrupt() //中断线程
Thread.isInterrupted() //判断是否被中断
Thread.interrupted() //判断是否被中断,并清除当前的中断状态
3.Thread.sleep()通常会使用try模块,抛出中断异常。如果使用到中断标志位,要在carch中手动再设置中断,因为抛出异常后线程会清空中断标记位。
4.Object.wait()会释放锁,Thread.sleep()不会释放锁,不释放锁会导致其他线程不能获取该资源。 wait必须使用在临界区中,用于线程之间通讯和线程同步。
sleep的使用,主要用于防止多线程对CPU进行争夺,导致CPU被某个线程单独霸占,从而使得其他线程占用资源却不能被处理。
5.join使main主线程等待该线程结束;yield谦让资源。
6.线程同步的方式
使用临界区或者锁机制
使用wait(),notify()的方式,这两种方法是Object的中的方式,资源类对 象使用wait(),临界区中的线程释放锁暂停,notity()唤醒资源类相关任意1个被wait的线程。

你可能感兴趣的:(线程的基础)