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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • EXTJS AJAX提交带提示框功能实现

    EXTJS AJAX提交带提示框功能实现

    2021年9月5日
    98
  • android换机备份,安卓手机备份迁移指南

    android换机备份,安卓手机备份迁移指南原标题:安卓手机备份迁移指南买了新手机,本来是一件非常开心的事情,但是如何将旧手机上的有用信息转移到新手机上,这可是一件让大家很犯愁的事情,今天就跟着小编一起来看看安卓手机的四种转移数据的方法吧。1、一键换机现在很多的手机都有一键换机的功能,能直接将旧手机上的所有数据转移到新手机上,非常的方便。下面我们用小米手机来看看具体的换机操作。首先在小米手机“设置—更多设置”中,找到“一键换机”功能。然后…

    2022年5月22日
    72
  • 添加背景音乐的html标签是music,添加背景音乐的html标签是什么,

    添加背景音乐的html标签是music,添加背景音乐的html标签是什么,添加背景音乐的html标签是什么添加背景音乐的html标签是什么,添加背景音乐的html标签是bgsound。bgsound用于插入背景音乐,但只适用于IE,不适用于netscape和firefox。它的参数很少设置,语法是“bgsoundsrc=’bjyy.mp3′loop=-1”。推荐:《HTML视频教程》添加背景音乐的html标签是bgsound。Bgsound用于插入背景音乐,但只适…

    2022年7月25日
    7
  • UVALive 6665 Dragonas Cruller[通俗易懂]

    UVALive 6665 Dragonas Cruller

    2022年1月29日
    35
  • RelativeLayout.LayoutParams学习与运用

    RelativeLayout.LayoutParams学习与运用1、了解LayoutParams其实LayoutParams就是代表一个布局属性,每一个ViewGroup对应一种LayoutParams。LinearLayout对应LinearLayout.LayoutParams,RelativeLayout对应RelativeLayout.LayoutParams。我们在XML中写的大多数属性,在代码中通过LayoutParams同样可以操作界面布局。下面以

    2022年7月17日
    14
  • Visio2013密钥_excel2013密钥

    Visio2013密钥_excel2013密钥C2FG9-N6J68-H8BTJ-BW3QX-RM3B3 2NYF6-QG2CY-9F8XC-GWMBW-29VV8 FJ2N7-W8TXC-JB8KB-DCQ7Q-7T7V3&

    2022年8月4日
    6

发表回复

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

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