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

posted @ 2016-02-01 11:00  PaganMonkey  阅读(201)  评论(0编辑  收藏  举报

喜欢的话可以打赏一下哦!!!

支付宝

微信