课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 实例方法中使用synchronized关键字制造同步块
  • 实例方法中使用synchronized关键字制造同步块

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

  • 昆明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--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56