您的位置:首页 > 其它

2016-02-01 11:00 197 查看
1.内部锁

每个Java对象都可以隐式地扮演一个用于同步的锁的角色,这些内置的锁被称为内部锁或监视器锁。

获取锁:获取内部锁的唯一途径是,进入这个内部锁保护的同步块或方法。

退出锁:无论通过正常控制路径退出,还是从块中抛出异常,线程都在放弃对synchronized块的控制是自动释放锁。

2.互斥锁

内部锁在Java中扮演了互斥锁(mutex)的角色,意味着至多只有一个线程可以拥有锁,当线程A尝试请求一个呗线程B占有的锁时,线程A必须等待或者阻塞,直到B释放它。如果B永远不释放锁,A将永远等下去。

由同一个对象锁保护的不同代码块,不会被同时执行。

//由同一个对象锁保护的不同代码块,不会被同时执行。
public class Example4 {
final static Object o = new Object();

public class Task implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
//在开始到结束之间不会插入其他操作
synchronized (o) {
System.out.println("开始+sleep");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("结束+sleep");
}

//在开始到结束之间不会插入其他操作
synchronized (o) {
System.out.println("开始-sleep");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("结束-sleep");
}
}
}
}

public static void main(String[] args) {
Example4.Task task = new Example4().new Task();
for (int i = 0; i < 10; i++) {
new Thread(task).start();
}
}
}


sd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: