马士兵视频:锁问题

来源:互联网 发布:com域名 编辑:程序博客网 时间:2024/06/16 02:15

(锁问题)当m1执行的过程中,m2能够执行吗?

public class TestLock {    int b = 100;    public synchronized void m1() throws Exception {        b = 1000;        Thread.sleep(5000);        System.out.println("m1:b = " + b);    }    public void m2() {        System.out.println("m2:b = " + b);    }}

[解答]
非加锁的程序可以自由访问加锁程序中的资源,如果把m2也加上锁,就必须m1和m2顺序执行了,中间不会被打断,谁在先,看谁先执行。


public class TestLock implements Runnable{    int b = 100;    public synchronized void m1() throws Exception {        b = 1000;        System.out.println("m1:b = " + b);        Thread.sleep(5000);    }    public synchronized void m2() {        b = 2000;        try {            Thread.sleep(10000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("m2:b = " + b);    }    public void run() {        try {            m1();        } catch (Exception e) {            e.printStackTrace();        }    }    public static void main(String []args) {        TestLock tl = new TestLock();        tl.m2();        Thread t = new Thread(tl);        t.start();    }}

最后结果是:
m2:b=1000;
m1:b=1000;

2 0
原创粉丝点击