线程


多线程
进程: OS中并发的一个任务
并发原理:CPU分时间片,多任务交替执行;宏观并行,微观串行

线程: 在一个进程中,并发的一个顺序执行流程
线程的三要素:
1. CPU : 由OS负责调度
2. Data: 堆空间共享,栈空间独立
3. Code:  

实现线程的两种方式
(1) 继承Thread类,覆盖run方法. 直接创建线程对象
(2) 实现Runnable接口,实现run方法.先创建Runnable对象,再创建线程对象
线程对象代表了底层的线程,创建线程对象后,调用start方法,会启动对应的线程


线程同步:

多线程并发访问同一个对象(临界资源),如果破坏了不可分割的操作(原子操作),就会发生数据不一致的问题

在Java中,每个对象都有一个互斥锁标记,用来分配给线程

synchronized(o){}  对o加锁的同步代码块
只有拿到o对象锁标记的线程,才能进入对o加锁的同步代码块;当线程离开对o加锁的同步代码块时,会释放o的锁标记

synchronized 方法的修饰符  同步方法  对this加锁的同步代码块
只有拿到o对象锁标记的线程,才能调用o的同步方法;当方法调用返回时,线程会释放o的锁
标记


线程间通信:
等待-通知
o.wait(): 必须放在对o加锁的同步代码块中. 线程会释放其所拥有的所有锁标记,进入o的等待队列
o.notify()/notifyAll():必须放在对o加锁的同步代码块中,线程会从o的等待队列中释放一个/全部线程
sleep() : 来自Thread类  失去CPU,不会释放锁
wait()
  : 来自Object类  失去CPU,会释放锁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章