synchronized

synchronized

 package com.tester;

public class Thread3 {

    class Inner {

        private void m4t1() {

            int i = 5;

            while (i– > 0) {

                System.out.println(Thread.currentThread().getName()

                        + ” : Inner.m4t1()=” + i);

                try {

                    Thread.sleep(500);

                } catch (InterruptedException ie) {

                }

            }

        }

        private void m4t2() {

            int i = 5;

            while (i– > 0) {

                System.out.println(Thread.currentThread().getName()

                        + ” : Inner.m4t2()=” + i);

                try {

                    Thread.sleep(500);

                } catch (InterruptedException ie) {

                }

            }

        }

//会同步,同一个对象只有一把锁

        // private synchronized void m4t2() {

        // int i = 5;

        // while (i– > 0) {

        // System.out.println(Thread.currentThread().getName()

        // + ” : Inner.m4t2()=” + i);

        // try {

        // Thread.sleep(500);

        // } catch (InterruptedException ie) {

        // }

        // }

        // }

    }

    private void m4t1(Inner inner) {

        synchronized (inner) { // 使用对象锁

            inner.m4t1();

        }

    }

    private void m4t2(Inner inner) {

        inner.m4t2();

    }

    // 不会同步,因为锁的对象不同

//    private synchronized void m4t2(Inner inner) {

//        inner.m4t2();

//    }

    public static void main(String[] args) {

        final Thread3 myt3 = new Thread3();

        final Inner inner = myt3.new Inner();

        Thread t1 = new Thread(new Runnable() {

            public void run() {

                myt3.m4t1(inner);

            }

        }, “t1”);

        Thread t2 = new Thread(new Runnable() {

            public void run() {

                myt3.m4t2(inner);

            }

        }, “t2”);

        t1.start();

        t2.start();

    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100540.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 三极管饱和条件[通俗易懂]

    三极管饱和条件[通俗易懂]三极管饱和条件 0推荐1.在实际工作中,常用Ib*β=V/R作为判断临界饱和的条件。根据Ib*β=V/R算出的Ib值,只是使晶体管进入了初始饱和状态,实际上应该取该值的数倍以上,才能达到真正的饱和;倍数越大,饱和程度就越深。 2.集电极电阻越大越容易饱和;3.饱和区的现象就是:二个PN结均正偏,IC不受IB之

    2022年9月11日
    5
  • 3.RT-thread 项目实战–LED驱动及finsh组件调试

    3.RT-thread 项目实战–LED驱动及finsh组件调试RT-thread在19年12月份推出了一个很好用的工具RT-threadstdio,比Env更加的方便,接下来的代码开发我们就使用这个工具进行,不使用keil和IAR了。工具的一些配置和入门使用直接看官方的教学视频就可以了,这里我们不做过多的介绍,下面开始进入今天的正题。打开我们的软件后,点击文件–》新建–》RT-thread项目,然后取个项目名字,就叫temp_prj吧,然…

    2022年5月21日
    39
  • java struts2 漏洞_struts2漏洞原理及解决办法

    java struts2 漏洞_struts2漏洞原理及解决办法1、原理Struts2的核心是使用的webwork框架,处理action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介绍)语句。当我们提交一个http参数:?user.address.city=Bishkek&user[‘favoriteDrink’]=kumysONGL将它转换为:action.getUser…

    2022年7月19日
    20
  • 程序员有哪些强迫症?听知乎网友为你现身说法[通俗易懂]

    程序员有哪些强迫症?听知乎网友为你现身说法

    2022年3月4日
    42
  • odoo连接数据库操作数据「建议收藏」

    #!/usr/bin/envpython#_*_coding:utf-8_*_importpsycopg2db=psycopg2.connect(“dbname=linxerpuser=postgres”)vals=db.cursor()vals.execute(“selectidfromir_translationwherevalue=’产品接收证明单号:’;

    2022年4月15日
    86
  • 推荐几个代码自动生成器,神器!!!「建议收藏」

    20个代码生成框架老的代码生成器的地址:https://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html以下是大家推荐的最近很火爆的代码生成器神器。如果有更好的希望大家多多留言,我会及时补充上去。————————-更新补充———————————…

    2022年4月1日
    1.5K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号