-
Java书籍查看全部
-
扩展知识点7查看全部
-
扩展知识点6查看全部
-
扩展知识点4查看全部
-
扩展知识点3查看全部
-
扩展知识点2查看全部
-
扩展知识点1查看全部
-
wait set -- 线程的休息室 Critical Section 共享资源/共享数据 --- 临界区 当现在有一个线程需要访问共享资源的时候 首先,需要获得锁,当它获得了锁之后将进入临界区进行操作 操作过程中,如果它发现某些情况不被满足(条件不满足无法执行) 它将调用锁对象上的一个wait方法,此时这个线程首先会释放掉锁资源,然后进入到锁对象上的wait set 由于这个线程释放掉了锁资源,使得其他线程可以有机会来竞争这个临界资源 所以其他的线程获得了锁并且进入到临界区域,同时在锁对象上的等待集合中有多条线程在等待条件的满足 当当前运行线程执行完某些操作,需要通知等待的线程时,它调用notify()方法,将会唤醒锁资源所持有的等待集合中一条线程(随机唤醒,由底层算法实现的,无法控制) 使这条线程有机会竞争CPU资源 或者,当当前运行线程调用了notifyAll()方法,将会使当前锁对象上的等待集合中的全部线程都被唤醒,从而有机会在当前线程离开并释放了锁之后,竞争这个临界资源的锁对象查看全部
-
同步: (一定是两个线程之间交互的操作,一定是有一个发出消息,而另一个响应这条消息) 由于某些条件的不具备,使得线程处于等待的状态,所有线程都无法进入核心代码区域访问共享的数据 而在某个时间,资源具备了条件可以被线程访问的时候,只需要发出一条消息就可以唤醒所有线程进行访问 wait() notify() notifyAll() 都是object对象的成员函数 wait()线程进入等待状态 notifyAll()唤醒所有线程 它们两个并不是在同一个线程的同一次操作中执行的查看全部
-
只有获得了lockObj锁的线程能够进入到synchronized的核心区域 而其他没有获得锁的对象都无法进入和操作数据 Java保证了同一时间只能有一个线程获得lockObj 使用加锁实现线程的互斥,一把锁锁住之后,同一时间只能有一个线程访问该资源,其他线程访问无法进入访问查看全部
-
互斥:关键数据在同一时间,只能被一个线程所访问 给代码使用synchronized加一把锁, 是其他区域代码不能进入访问关键资源查看全部
-
synchronized锁关键字实现线程互斥 持续的申请锁会降低系统性能,所以这里需要使用wait()方法,让线程进入一个等待的状态,从而避免了线程不停的持续申请锁,降低系统的性能 lockObj.notifyAll(); 唤醒所有在lockObj对象上等待的线程查看全部
-
发生争用示例图查看全部
-
条件争用查看全部
-
什么时候使用thread 什么时候使用runnable 其实两种方式效果一样,但推荐使用runnable 因为Java是单继承,继承了thread就不能继承其他的类 而实现runnable接口的话,扩展性要好很多查看全部
举报
0/150
提交
取消