Java 同步方法...不同步

2023-11-29

对于我当前的 java 练习,我必须从 2 个不同的 Gmail 帐户获取邮件。我通过创建 Gmail 类的新实例来完成此操作。 gmail 类扩展了线程,其中有一个同步方法 readMail(),用于获取邮件并打印它。这个 readMail 方法由 run 方法在 while(true) 循环中调用,然后它会休眠 30 秒,其想法是每 30 秒获取一次邮件。但是,synchronized方法似乎不起作用。线程相互中断,并且在另一个线程中断并开始打印之前,该方法不会打印消息的所有项目。

任何建议将不胜感激。

请参阅下面给我带来麻烦的方法:

public synchronized void readMail() throws MessagingException, IOException {
    Folder inbox = store.getFolder("Inbox");
    inbox.open(Folder.READ_ONLY);
    messages = inbox.getMessages();
    // System.out.println("No of Messages : " + inbox.getMessageCount());
    // System.out.println("No of Unread Messages : "
    // + inbox.getUnreadMessageCount());

    for (int i = 0; i < inbox.getUnreadMessageCount(); i++) {

        System.out
                .println("*****************************************************************************");
        System.out.println("NEW MESSAGE " + (i + 1) + ":");
        msg = messages[i];
        // System.out.println(msg.getMessageNumber());
        // Object String;
        // System.out.println(folder.getUID(msg)

        String subject = msg.getSubject();

        System.out.println("Subject: " + subject);
        System.out.println("From: " + msg.getFrom()[0]);
        System.out.println("To: " + msg.getAllRecipients()[0]);
        System.out.println("Date: " + msg.getReceivedDate());
        System.out.println("Size: " + msg.getSize());
        // System.out.println(msg.getFlags());
        // System.out.println("Body: \n"+ msg.getContent());
        // System.out.println(msg.getContentType());
    }
}

然后是运行方法:

    public void run() {
    while (true) {

        try {
            readMail();
        } catch (MessagingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        try {
            sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
}

您应该在两个线程都可以访问的对象上同步您的方法,因为现在您正在使用您所在的对象实例来同步,其中的原因永远不会产生影响,因为据我所知,两个线程仅停留在其范围内你的问题。您可以在创建时将一个简单的对象传递给两个线程,并像这样重新格式化您的方法

传递对象进行同步:

public static void main(String[] args){
     Object obj = new Object();
     gmail g1 = new gmail(obj);
     gmail g2 = new gemail(obj);
     // more code
}

在 gmail 类中保存引用:

public class gmail extends Thread{
    private Object sharedObject;

    public gmail( Object synchronizer){
          sharedObject = synchronzier;
    }

对其进行同步:

public void readMail(){
   synchronized( sharedObject ){
       // your method code goes here
   }
}

对于此示例,同步 gmail 的类对象也是可能的,而且更容易

public void readMail(){
   synchronized( this.getClass() ){
       // your method code goes here
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 同步方法...不同步 的相关文章

  • 如何使用 Java 将 HTML 内容转换为 PDF 而不丢失格式?

    我有一些 HTML 内容 包括格式化标签 例如strong 图像等 在我的 Java 代码中 我想将此 HTML 内容转换为 PDF 文档 而不丢失 HTML 格式 有没有办法用 Java 来实现 使用 iText 或任何其他库 I use
  • 如何在java中压缩/解压tar.gz文件

    谁能告诉我在java中压缩和解压缩tar gzip文件的正确方法我一直在搜索 但我能找到的最多的是zip或gzip 单独 我写了一个包装器公共压缩 http commons apache org compress called jarchi
  • 指纹奇异点检测

    我正在尝试确定指纹的核心点和增量点 我正在使用庞加莱指数方法 但我无法成功检测到这一点 而且我不明白为什么 First I divide the image in 15x15 blocks then I calculate the x an
  • 重构——套接字中的良好实践——简单的服务器-客户端 Swing 应用程序

    我使用单例和观察者模式编写了一个带有 Swing 接口的简单服务器 客户端程序 每个客户端都连接到服务器并可以发送消息 服务器将其收到的消息转发给其余的客户端 客户端使用 GUI 允许它们随时连接和断开与服务器的连接 该程序运行得很好 因为
  • 如何降低圈复杂度?

    我正在开发一个将 RequestDTO 发送到 Web 服务的类 我需要在发送请求之前验证该请求 请求可以从 3 个不同的地方发送 并且每个 请求类型 有不同的验证规则 例如请求1必须有姓名和电话号码 请求2必须有地址等 我有一个 DTO
  • Java中定义类型后同时初始化多个变量?

    这里需要一些语法方面的帮助 我正在尝试在定义类型后重新初始化多个变量 例如 int bonus sales x y 50 这工作正常 但是我想稍后在程序中将不同的值放入其中一些变量中 但我收到语法错误 bonus 25 x 38 sales
  • JBoss AS 5 中的共享库应该放在哪里?

    我是 Jboss 新手 但我有多个 Web 应用程序 每个应用程序都使用 spring hibernate 和其他开源库和 portlet 所以基本上现在每个 war 文件都包含这些 jar 文件 如何将这些 jar 移动到一个公共位置 以
  • 以点作为分隔符分割字符串

    我想知道我是否要在一个字符串上分割字符串 正确的方式 我的代码是 String fn filename split return fn 0 我只需要字符串的第一部分 这就是我返回第一项的原因 我问这个是因为我在 API 中注意到 意味着任何
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • Scala(或 Java)中泛型函数的特化

    是否可以在 Scala 中专门化泛型函数 或类 例如 我想编写一个将数据写入 ByteBuffer 的通用函数 def writeData T buffer ByteBuffer data T buffer put data 但由于 put
  • Java 中 static 关键字如何工作?

    我正在阅读Java教程 http docs oracle com javase tutorial index html从一开始我就有一个问题static字段或变量上的关键字 作为Java said here http docs oracle
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • 在多模块项目中访问绑定适配器

    我有一个多模块项目 其中应用程序模块包含我的绑定适配器 而我的功能模块取决于我的应用程序模块 因为它是动态功能模块 应用程序 包含绑定适配器 gt 动态功能模块 存在布局的地方 我在所有模块中启用了数据绑定和 kapt 我无法成功构建应用程
  • 删除 ArrayList 对象问题

    我在处理作业时遇到从 ArrayList 中删除对象的问题 如果我使用 正常 for 循环 它的工作原理如下 public void returnBook String isbn for int i 0 i lt booksBorrowed
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • C++ 中的 Java ArrayList [重复]

    这个问题在这里已经有答案了 在Java中我可以做 List
  • 如何使用 Hibernate Session.doWork(...) 进行保存点/嵌套事务?

    我正在使用 JavaEE JPA 托管事务与 Oracle DB 和 Hibernate 并且需要实现某种嵌套事务 据我所知 此类事情不受开箱即用的支持 但我应该能够为此目的使用保存点 正如建议的https stackoverflow co
  • 使用 Cucumber Scenario Outline 处理 Excel 电子表格

    如果可能的话 我试图找到一种更优雅的方法来处理从与 Excel 电子表格行 第 n 个 相关的 Cucumber Scenario Outline 中调用第 n 个数字 目前 我正在使用迭代编号来定义要从中提取数据的 Excel 电子表格的
  • SWT - 与操作系统无关的获取等宽字体的方法

    SWT 有没有一种方法可以简单地获得跨各种操作系统的等宽字体 例如 这适用于 Linux 但不适用于 Windows Font mono new Font parent getDisplay Mono 10 SWT NONE 或者我是否需要

随机推荐

  • 找不到模块工作区/server.js

    我正在尝试使用 fast ai 中的示例和我开发的模型来启动 gcloud 应用程序引擎https github com imiled google app engine并按照 fastai 网页中的说明进行操作https course f
  • 通过迭代字典定义新变量的有效方法(Julia)

    考虑一本字典d在 Julia 中 它包含一千个键 每个键都是一个符号 每个值都是一个数组 我可以访问与符号关联的值 S1并将其分配给变量k1 via k1 d S1 现在假设我想定义新变量k2 k3 k4 k10对特殊键重复相同的过程 S1
  • 使用递归恢复字符串时如何删除点?

    我需要逆转Hello 使用递归使得最终结果不具有 我目前的方法是 public void foo Scanner scan new Scanner system in char c scan nextChar if c foo System
  • 如何导入现有的数据工厂ARM模板?

    我去了一个现有的数据工厂 并选择export template 然后 我手动创建了一个新的数据工厂 现在我尝试将现有的数据工厂导入到这个新的数据工厂 方法是转到新的数据工厂 然后选择import template 然而 这会引导我们进入一个
  • 如何在不使用“占位符” while 条件的情况下安全地循环,直到没有更多事情可做?

    为了调用我的 Web API 方法 直到没有更多数据返回 由于客户端 Windows CE 手持设备 的 98 磅弱角色 我分批获取它 以保持每个结果集较小 我正在使用这段代码 while moreRecordsExist redempti
  • 在CKFinder中自定义baseUrl和baseDir

    我们在许多 CMS 应用程序中使用 CKEditor 和 CKFinder for Coldfusion 这些应用程序指向我们服务器上的不同站点 因此我们希望 CKFinder 设置将文件上传到每个应用程序的特定目录 但我们希望服务器上的
  • 如何从数学角度看待高阶函数和IO动作?

    我试图从第一原理来理解函数式编程 但我却陷入了纯函数世界和具有状态和副作用的不纯现实世界之间的界面 从数学的角度来看 什么是返回函数的函数 什么是返回 IO 操作的函数 如 Haskell 的 IO 类型 详细说明 根据我的理解 纯函数是从
  • 关于mvc:intercepter,如何设置排除路径

    众所周知 我们可以这样配置拦截器
  • 更改android复选框的大小

    在我的 Android 应用程序中 我需要更改 Android 复选框的大小 我搜索并了解到它不能通过简单地更改属性来完成 我找到了这个链接但无法真正弄清楚到底需要做什么 找不到此链接 android sdk windows 1 0 r2
  • 使用主动/被动冗余模型的应用程序应如何使用 Kubernetes 进行容器化?

    我有一个在虚拟机上运行的分布式应用程序 其中有一个以主动 被动模式运行的服务 主用虚拟机通过公网IP提供服务 如果主动虚拟机发生故障 公共 IP 将移至被动虚拟机 被动虚拟机将变为主动虚拟机并开始提供服务 这种模式如何适合 kubernet
  • 在网页中显示 PDF

    我正在使用 Spring MVC 我想将 PDF 文件从本地显示到网页 我不知道我应该对我的控制器做什么来做到这一点 我看到一些类似的问题 其答案返回ResponseEntity
  • R:对 2 个数据帧的行进行 t 测试

    我有两个数据框 我想对行进行独立的 2 组 t 检验 即t test y1 y2 where y1是 dataframe1 中的一行并且y2与数据帧2中的匹配行 实现这一目标的最佳方法是什么 编辑 我刚刚找到了格式 dataframe1 i
  • 如何隐藏iOS状态下录音时的红条?

    我使用AVAudioRecorder来录制语音 我发现有时当我分配它并开始录音时 状态栏下会出现一个红色条 就像您在后台调用时的红色条 如何隐藏它 你不能那样做 每个应用程序 包括内置的语音备忘录应用程序 在使用麦克风时都会有该栏
  • 通过 JAXB 解组读取自定义 XML 处理指令

    通过 JAXB 解组时有没有办法读取自定义 xml 处理指令 例子
  • 更快的 UIImage - Base64 转换

    我正在做的工作必须在之间进行编码和解码UIImage和 Base 64 字符串 这对于较小的图像非常有效 向前和向后转换只需不到 1 秒 但当我将其应用于较大的图像时 需要很长时间 几乎一分钟 有没有其他方法来编码和解码UIImage对象字
  • 调用 ffmpeg.c 的 main 两次导致应用程序崩溃

    使用 FFmpeg 4 0 2 并调用它ffmpeg c s main函数两次导致 Android 应用程序崩溃 使用 FFmpeg 共享库和 JNI A libc Fatal signal 11 SIGSEGV code 1 fault
  • 使用通用参数作为端口数组长度

    我想做的事 entity FIRfilter is generic NTAPS integer port h in array 0 to NTAPS 1 of std logic vector 15 downto 0 end FIRfitl
  • 基于数据库数组PHP自动检查复选框

    在我的页面的 用户设置 选项卡中 我希望用户确定特定用户发布的帖子类型 表格如下
  • Spark独立模式和本地模式有什么区别?

    Spark独立模式和本地模式有什么区别 Spark Standalone是一个可以在集群上工作的资源管理器 它只是内置的资源管理器 而不是像纱线这样的外部资源管理器 Spark本地运行无需任何资源管理器 一切都在单个jvm中运行 您可以决定
  • Java 同步方法...不同步

    对于我当前的 java 练习 我必须从 2 个不同的 Gmail 帐户获取邮件 我通过创建 Gmail 类的新实例来完成此操作 gmail 类扩展了线程 其中有一个同步方法 readMail 用于获取邮件并打印它 这个 readMail 方