昆明java培训
达内昆明广州春城路

18487146383

热门课程

实例方法中使用synchronized关键字制造同步块

  • 时间:2016-10-07
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明Java培训机构的老师今天给大家讲实例方法中使用synchronized关键字制造同步块。

同步块中默认被加锁的对象是此同步块括号声明中包含的对象。

1 class ImmutableValue {

2    public synchronized void comeIn() throws InterruptedException{

3        System.out.println(Thread.currentThread().getName() + ": start");

4        Thread.sleep(5000);

5        System.out.println(Thread.currentThread().getName() + ": finish");

6    }

7    public void comeInIn() throws InterruptedException {

8        System.out.println(Thread.currentThread().getName() + ": start");

9        synchronized(this) {

10            

11        }

12        System.out.println(Thread.currentThread().getName() + ": finish");

13    }

14 }

15 public class TestImmutableValue {

16    public static void main(String[] args) {

17        ImmutableValue im = new ImmutableValue();

18        Thread t1 = new Thread(new Runnable() {

19

20            @Override

21            public void run() {

22                // TODO Auto-generated method stub

23                try {

24                    im.comeIn();

25                } catch (InterruptedException e) {

26                    // TODO Auto-generated catch block

27                    e.printStackTrace();

28                }

29            }

30            

31        }, "t1");

32        Thread t2 = new Thread(new Runnable() {

33

34            @Override

35            public void run() {

36                // TODO Auto-generated method stub

37                try {

38                    im.comeInIn();

39                } catch (InterruptedException e) {

40                    // TODO Auto-generated catch block

41                    e.printStackTrace();

42                }

43            }

44            

45        }, "t2");

46        t1.start();

47        t2.start();

48    }

49 }

由以上代码可以看到:在comeInIn方法中,运用 synchronized(this)制造同步块,要执行同步块内的代码,就必须获得this对象的锁(调用comeInIn方法的对象)。

由此执行结果可见:t1线程先执行了comeIn方法,获得了对象im的锁,之后由于t1线程进入睡眠状态,t2线程得到运行,开始执行comeInIn方法,当执行到同步代码块时发现对象im已被加锁,无法继续执行。t1线程睡眠结束之后继续执行,结束后释放对象im的锁,t2线程才能继续执行。

学Java开发就到昆明达内Java培训班!了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:Java synchronized静态方法使用synchronized加锁
下一篇:静态方法中使用synchronized关键字制造同步块

达内Java开发学员易帅哥月薪7k入职科蓝软件

达内java程序员掌握技术就掌握铁饭碗

Java面试3大经验,线程间协作原理

iPhone摄像头发展史一步一个脚印

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货