java synchronized/wait/notify/互斥/同步
来源:互联网 发布:山东省网络快报 编辑:程序博客网 时间:2024/05/21 15:06
1.互斥问题
synchronized关键字,天生互斥,只用这个关键字就能实现互斥。两个线程有一个共同的锁lock,那么其中一个拿到lock,另一个就要等待。模型如下:
thread A:
synchronized(lock){
//do
}
thread B:
synchronized(lock){
//do
}
这两个线程的两个synchronized块中的代码是互斥的。
代码如下:两个类SynchronizeTest / SynchronizeTest1
package spidercsdn;public class SynchronizeTest implements Runnable{public Object lock = new Object();public static SynchronizeTest instance = null;public Object getLock(){return lock;}public static synchronized SynchronizeTest getInstance() {if(instance==null)instance = new SynchronizeTest();return instance;}public void setName() throws InterruptedException{synchronized(lock){System.out.println("lock inner");Thread.sleep(10000);System.out.println("after sleep,you can print");}Thread.sleep(10000);System.out.println("lock outter");}public static void main(String[] args) throws InterruptedException {new Thread(SynchronizeTest.getInstance()).start();new Thread(new SynchronizeTest1()).start();}@Overridepublic void run() {try {SynchronizeTest.getInstance().setName();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package spidercsdn;public class SynchronizeTest1 implements Runnable{public void setName(){synchronized (SynchronizeTest.getInstance().getLock()) {System.out.println("inner st1");}System.out.println("outter st1");}public static void main(String[] args) {}@Overridepublic void run() {SynchronizeTest1 st1 = new SynchronizeTest1();st1.setName();}}
2.wait notify实现的同步问题
wait notify都要出现在synchronized语句块中,一旦wait,wait后面的语句无论在synchronized里面还是外面,一律全都不执行了,让出cpu。
一旦notify,notify后面的语句照常执行,并且通知wait的线程继续执行,但是,只有notify语句后面的在synchronized块中当语句执行完,wait的线程才继续,而notify语句后面的在synchronized块外的代码无所谓,没有特殊性,谁也不用等他执行完。
代码如下:两个类SynchronizeTest / SynchronizeTest1
package spidercsdn;public class SynchronizeTest implements Runnable{public Object lock = new Object();public static SynchronizeTest instance = null;public Object getLock(){return lock;}public static synchronized SynchronizeTest getInstance() {if(instance==null)instance = new SynchronizeTest();return instance;}public void setName() throws InterruptedException{synchronized(lock){System.out.println("11111111");Thread.sleep(10000);System.out.println("22222222");lock.wait();System.out.println("55555555");}System.out.println("66666666");}public static void main(String[] args) throws InterruptedException {new Thread(SynchronizeTest.getInstance()).start();new Thread(new SynchronizeTest1()).start();}@Overridepublic void run() {try {SynchronizeTest.getInstance().setName();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package spidercsdn;public class SynchronizeTest1 implements Runnable{public void setName() throws InterruptedException{synchronized (SynchronizeTest.getInstance().getLock()) {System.out.println("33333333");SynchronizeTest.getInstance().getLock().notify();Thread.sleep(10000);System.out.println("44444444");}Thread.sleep(10000);System.out.println("7777777");}@Overridepublic void run() {SynchronizeTest1 st1 = new SynchronizeTest1();try {st1.setName();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
0 0
- java synchronized/wait/notify/互斥/同步
- java并发包中的Condition和Lock 取代Synchronized、wait、notify/notifyAll实现线程的同步与互斥
- Java 线程同步互斥 wait、notify、notifyall
- Java线程同步 (synchronized wait notify)
- Java线程同步(synchronized wait notify)
- Java线程同步 (synchronized wait notify)
- Java线程同步 (synchronized wait notify)
- 【java】线程同步(synchronized,wait,notify,notifyAll)
- Java线程同步 (synchronized wait notify)
- java线程同步(synchronized,wait,notify,notifyAll)
- Java线程同步 (synchronized wait notify)
- Java同步机制:synchronized,wait,notify
- java同步技术-wait, notify, synchronized
- java 线程同步 synchronized() wait() notify()
- Java Notify Wait Synchronized
- java 的线程同步(synchronized ,wait,notify)
- JAVA 的wait(), notify()与synchronized同步机制
- Android/JAVA 笔记 同步操作/synchronized / wait()/ notify()
- VBScript
- 基于HTML5的WebGL电信网管3D机房监控应用
- View 和ViewGroup
- 欢迎使用CSDN-markdown编辑器
- codeforces-446A-DZY Loves Sequences
- java synchronized/wait/notify/互斥/同步
- where 1<> 1 和where 1=1的用法
- 多线程——NSOperation
- photoshop抠图
- QT5.5下的USB HID热插拔检测,未全部完成,聊作记录。
- Android下adb用法总结
- ecshop 数据库调试技巧 【强烈推荐】
- Htmlparser 中的各种Filter介绍
- UML第十四集(18)之交互图、协作图