互斥与同步
3333333333
22222222
11111111111
互斥的实现:synchronized
同步的实现:wait()/notify()/notifyAll()
同步的操作
互斥实现:
private finall Object lockObj=new Object();
synchronized(lockObj){}
同步实现:
lockObj.wait();
lockObj.notifyAll();
lockObj.notify();
1:线程的互斥是指,关键数据在同一时间只能有一个线程访问
2:线程互斥的实现有synchronized关键字来实现,类似于给对应的代码加锁,只有获得锁的线程才能运行此段代码
3:线程的同步是指,线程间的一种通信控制,一个线程完成了某事后唤醒其他因某些资源不足而等待的线程
4:线程同步的实现有wait()(会释放所资源,然后进入锁对象上的wait set),notify()(会唤醒所对象的wait set中的一个线程),notifyall()(会唤醒所对象的wait set中的所有线程)这几个方法来实现,这几个方法都是属于object
线程的互斥
private final Object lockObj=new Object();
synchronized(lockObj){
核心代码
}
同步的实现:wait()/notify()/notifyAll()
1:线程的互斥是指,关键数据在同一时间只能有一个线程访问
2:线程互斥的实现有synchronized关键字来实现,类似于给对应的代码加锁,只有获得锁的线程才能运行此段代码
3:线程的同步是指,线程间的一种通信控制,一个线程完成了某事后唤醒其他因某些资源不足而等待的线程
4:线程同步的实现有wait()(会释放所资源,然后进入锁对象上的wait set),notify()(会唤醒所对象的wait set中的一个线程),notifyall()(会唤醒所对象的wait set中的所有线程)这几个方法来实现,这几个方法都是属于object
这个视频互斥和同步讲的很细致
线程的交互:互斥与同步
互斥与同步
线程互斥与同步
1:线程的互斥是指,在同一时间关键数据只能有一个线程访问<br>
2:线程互斥的实现有synchronized关键字来实现,类似于给对应的代码加锁,只有获得锁的线程才能运行此段代码
3:线程的同步是指,线程间的一种通信控制,一个线程完成了某事后通知另一个线程可以进行下面的事情了
4:线程同的实现有wait(),notify(),notifyall()这几个方法来实现,这几个方法都是属于object
线程的互斥与同步概念
互斥:关键数据在同一时间只能被一个线程所访问
同步:多条线程在交替执行时确保共享资源的正确/安全性
总结:
线程获取锁-->进入临界区域后执行代码,如果线程调用wait()方法,线程会进入当前锁对象上的wait Set集合中,并且释放锁,当锁对象调用notifyAll()方法时会唤醒当前锁对象的waitSet集合中的线程,让线程可以再次去获取锁然后执行代码
线程的互斥

Object对象,线程同步的实现
lookObj.wait()
线程进入等待
lookObj.notifyAll()
发出通知,所有线程可以重新竞争cpu
wait方法会释放锁资源
object对象的三个方法:wait,notify,notifyAll
第四章的内容可以再多看看
同步,一定是两个线程之间的交互,一个发出消息,一个响应。
1:线程的互斥是指,在同一时间关键数据只能有一个线程访问<br>
2:线程互斥的实现有synchronized关键字来实现,类似于给对应的代码加锁,只有获得锁的线程才能运行此段代码
3:线程的同步是指,线程间的一种通信控制,一个线程完成了某事后通知另一个线程可以进行下面的事情了
4:线程同的实现有wait(),notify(),notifyall()这几个方法来实现,这几个方法都是属于object
互斥:关键数据在一个时间被一个线程使用。
同步实现:object 方法wait()/notify()/notifyAll();
wait set 类似于线程的休息室,访问共享数据的代码称为critical section。一个线程获取锁,然后进入临界区 ,发现某些条件不满足,然后调用锁对象上的wait方法,然后线程释放锁资源,进入锁对象上的wait set。其他线程可以获取所资源,然后执行,完了以后调用notify()/notifyAll(),唤醒锁对象上的一个/全部等待线程,有机会在当前线程离开临界资源释放锁之后竞争临界资源的锁对象。
互斥与同步的代码实现
线程加锁
同步可以由wait()/notify()/notifyAll()实现,这三个方法都是Object对象而非Thread对象。同步一定是由两个或多个线程之间完成的,而不是由一个线程完成的,当一个其他线程完成时,会通过notify通知被阻塞的线程(如果满足条件则唤醒),实现进程间的通信即为线程同步。wait()和notify()是在不同的线程中调用的
1:线程的互斥是指,在同一时间关键数据只能有一个线程访问<br>
2:线程互斥的实现有synchronized关键字来实现,类似于给对应的代码加锁,只有获得锁的线程才能运行此段代码
3:线程的同步是指,线程间的一种通信控制,一个线程完成了某事后通知另一个线程可以进行下面的事情了
4:线程同的实现有wait(),notify(),notifyall()这几个方法来实现,这几个方法都是属于object类,并不是thread类
建议:
1、Java Memory Mode:JMM描述了java线程如何通过内存进行交互,了解happens-before,synchronized,voliatile & final
2、Locks % Condition:锁机制和等待条件的高层实现 java.util,concurrent.locks
3、线程安全性:原子性与可见性,死锁等
4、多线程常用的交互模型
· Producer-Consumer模型
· Read-Write Lock模型
· Future模型
· Worker Thread模型
5、Java5中并发编程工具:java.util.concurrent 线程池ExcutorService Callable&Future BlockingQueue
创建线程有两种方式:继承Thread类和Runnable接口;继承Runnable接口是将Runnaleb作为参数传入Thread中来创建线程;用户可以通过重写run方法来规定线程来做哪些事情,即任务;因为多个线程争抢cpu资源,可能会造成数据的破坏,因此可通过线程锁即synchronized(中文意思:同步的)关键字配合wait方法来过滤掉不满足条件的线程,使这些线程保持休眠状态知道被重新唤醒,而满足条件的线程继续执行,执行完毕后,通过notify()/notifyAll()方法唤醒处于睡眠状态的线程,重新竞争资源,然后再次通过线程锁重新筛选,循环往复!!!老师讲得真精彩!!大赞!!!