两个同步方法是否同时执行

2023-12-30

我有4种方法(m1, m2, m3 and m4)在课堂上。方法m1, m2 and m3 are synchronized方法。另外,我有4个线程t1, t2, t3 and t4分别。

If t1访问m1方法(同步方法),可以t2线程访问m2方法(同步方法)同时进行?如果不是的话t2会是什么状态?


如果t1访问m1方法(同步方法),t2线程是否可以同时访问m2方法(同步方法)?

The synchronized关键字适用于对象级别,并且只有一个线程可以持有该对象的锁。所以只要你谈论的是同一个对象,那么no, t2会等待t1释放进入时获取的锁m1.

然而,线程可以通过调用释放锁而不从方法返回Object.wait().

如果不是,t2 的状态会是什么?

它会坐稳并等待t1释放锁(从方法返回或调用Object.wait())。具体来说,它将在一个BLOCKED state http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.State.html#BLOCKED.

线程被阻塞等待监视器锁的线程状态。处于阻塞状态的线程正在等待监视器锁进入同步块/方法或调用后重新进入同步块/方法Object.wait.

示例代码:

public class Test {

    public synchronized void m1() {
        try { Thread.sleep(2000); }
        catch (InterruptedException ie) {}
    }

    public synchronized void m2() {
        try { Thread.sleep(2000); }
        catch (InterruptedException ie) {}
    }

    public static void main(String[] args) throws InterruptedException {
        final Test t = new Test();
        Thread t1 = new Thread() { public void run() { t.m1(); } };
        Thread t2 = new Thread() { public void run() { t.m2(); } };

        t1.start();
        Thread.sleep(500);

        t2.start();
        Thread.sleep(500);

        System.out.println(t2.getState());
    }
}

Output:

BLOCKED
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个同步方法是否同时执行 的相关文章

随机推荐

  • 如何在imageView上显示从内部存储中选择的图像?

    我是在 android 中处理图像的新手 我想从内部存储加载图像 但它给了我权限被拒绝错误 然后我已将权限添加到 android 清单文件 但我仍然无法完成我的任务 这是我的代码 import android graphics Bitmap
  • 将Google Data Studio连接到本地Mysql服务器

    我已经开始使用 Google 的 Data Studio 我发现只需很少或根本不需要编码技能 就可以轻松地将 Excel 数据转换为直观的业务仪表板 但我这里有一个问题 每当我尝试连接到 Mysql DB 在我的本地系统上运行 时 我都会遇
  • 在 C# winform 中如何识别应用程序显示在哪个监视器上

    重复的如何在 C 中找到应用程序正在哪个屏幕上运行 https stackoverflow com questions 549751 how do i find what screen the application is running
  • 应用程序无法搭建项目

    我在 VS 2013 Professional 中创建了一个 MVC 5 应用程序 然后首先将 EF 6 1 代码与 SQL Server Express 上的现有数据库一起使用 当我尝试创建视图时 我使用 新脚手架项目 然后选择 带有视图
  • 安卓内部存储

    我需要在手机内存中存储一 个对象 如何在 Android 中执行此操作 希望您觉得这个博客有用 http pierrchen blogspot com 2011 11 android storage html http pierrchen
  • 在 Matlab 用户界面中跨多个 m 文件搜索文本

    有办法吗withinmatlab 用户界面在多个 m 文件中搜索某些文本 按 Ctrl Shift f 或转到菜单 编辑 gt 查找文件 您将得到一个很好的对话框 希望它能够满足您的要求
  • .htaccess 错误 - ERR_TOO_MANY_REDIRECTS

    我有这个 htaccess 文件要重定向http to https 我也做了www 到根域重定向 www 到根域有效 然而https 重定向没有 如果我设置RewriteCond HTTPS on to RewriteCond HTTPS
  • MongoDB bind_ip 错误:bind() 失败 errno:99 无法为套接字分配请求的地址

    我想配置 mongodb 以允许来自外部 IP 地址的远程连接 例如66 31 123 123 Setting 0 0 0 0 to bind ip可行 但我想更加严格 只允许某些 IP 地址进行连接 我附加了66 31 123 123 t
  • 如何在 asp.net 会话变量过期之前执行服务器端代码?

    在我的 asp net 网站中 我在用户登录时创建一个会话 我想在该会话到期之前在数据库中执行一些操作 我在确定应该在哪里编写代码以及如何知道会话时遇到问题即将过期 我不确定 Global asax 的 session end 事件是否适合
  • 如何访问第二个麦克风 Android(例如 Galaxy 3)

    现在很多智能手机都有不止一个麦克风 一个用于语音输入 另一个用于减少环境噪音 我想知道如何独立访问两个麦克风的信号 或者关闭其中一个麦克风 欢迎任何想法或评论 多谢 我对 Galaxy S3 不太熟悉 但以下情况适用于我使用过的大多数设备
  • strtotime 结果没有意义,php bug?

    以下行 echo date d strtotime First Saturday August 2015 prints 08 这似乎没有任何意义 因为一周中的某一天第一次出现不能在 7 号之后 这是一个 php bug 还是一个 php b
  • Android 开发:“线程因未捕获的异常而退出”

    我正在尝试创建我的第一个 Android 应用程序 游戏 但开始时遇到一些困难 当我运行我的代码时 我收到以下错误日志 05 25 02 41 51 022 WARN dalvikvm 634 threadid 1 thread exiti
  • UIView 动画块暂停动画和完成代码

    我有一个动画块来执行基于简单变换的动画 完成后将从其超级视图中删除有问题的视图 UIView msgView UIView alloc initWithFrame CGRectMake 160 120 160 100 Do stuff to
  • 文件夹内的批处理文件创建 MediaInfo.nfo 文件

    我正在尝试创建一个批处理 其目的是使用 MediaInfo exe CLI 创建一个包含文件夹中包含的视频文件的所有 mediainfo 的文本文件 nfo 批处理是从上下文菜单中执行的 右键单击包含视频文件的文件夹 为此 该文件将被放置在
  • 如何从 CLGeocoder 获取多个地标

    无论我向地理编码器提供什么地址 geocoder geocodeAddressString completionHandler 它总是只在地标数组中放置一个对象 我有什么方法可以获得多个结果 例如在地图应用程序中 用户可以从中选择一个结果
  • Visual Studio 解决方案中的多个 Web 应用程序项目

    我目前正在开始使用 ASP Net Webforms 开发一个新网站 为了让这个项目有一个正确的开始 我正在研究应用程序的 Visual Studio 解决方案设置 我希望我的应用程序由大小 代码行 相同的易于识别的组件组成 由于该项目尚未
  • ImageData 数组中的索引逻辑是什么?

    这个问题是为了更深入的理解我之前关于大尺寸Canvas动画的问题 问题在这里 重复 HTML 画布元素 框 以填充整个视口 https stackoverflow com questions 65340502 repeat html can
  • 如何在另一个方法中调用变量?

    如何在另一个变量中调用变量method在相同的class public void example String x name public void take how to call x variable 首先声明您的方法接受参数 publ
  • 在演示过程中,prepareForSegue 被调用两次,并尝试呈现

    我是ios编程新手 在这里提问 但我一直访问 我很困惑为什么会遇到这个问题 它编译时没有错误 并且我已经检查并检查了 MainStoryboard 中的所有插座和标识符 我有 2 个 UITableViewController 当用户选择表
  • 两个同步方法是否同时执行

    我有4种方法 m1 m2 m3 and m4 在课堂上 方法m1 m2 and m3 are synchronized方法 另外 我有4个线程t1 t2 t3 and t4分别 If t1访问m1方法 同步方法 可以t2线程访问m2方法 同