本帖最后由 lancerjs 于 2014-7-9 16:21 编辑
- /*
- * 死锁: 多个线程之间,相互访问
- */
- public class LockDemo {
- public static void main(String[] args) {
- //创建2个线程对象
- MyLock m1 = new MyLock();
- MyLock m2 = new MyLock();
-
- //启动线程
- m1.start();
- m2.start();
- }
- }
复制代码
- public class MyLock extends Thread {
- private int x = 0;
- @Override
- public void run() {
- //m1,m2
-
-
- while(true){
-
- //m1,m2
-
- if (x % 2 == 0) {
-
- //第一个人 m1
- synchronized (MeLock.objA) {
- System.out.println("objA--(if)");
-
- //模拟抢第二个人的筷子
- synchronized (MeLock.objB) {
- System.out.println("objB---(if)");
- }
- }
-
-
- } else {
-
- //另一个人
- synchronized (MeLock.objB) {
- System.out.println("objB---(else)");
-
- //原来的第一个人 又想吃
-
- //模拟抢第一个人的筷子
- synchronized (MeLock.objA) {
- System.out.println("objA---(else)");
- }
- }
- }
-
- x++;
- }
- }
- }
复制代码- /*
- * 锁对象
- */
- public class MeLock {
- public static Object objA = new Object();
- public static Object objB = new Object();
- }
复制代码
死锁的例子
|