当前位置: 首页 > 面试题库 >

同步方法还是使用spring @transactional?

云宏儒
2023-03-14
问题内容

我有一种将用于发送电子邮件的方法。我想锁定此方法,以便每次只有一个线程可以访问它,其余线程同时存储。我应该同步方法还是使用spring
@transactional PROPAGATION_REQUIRED?

在我的服务层

 //each time use new thread to send out email
  public  void sendThroughSMTP(List<String> emails,String subject,String content){

            //each time will open and sent through port 25.  dont u think this will caused too many threads spawned?
            BlastEmailThread blastEmailThread = new BlastEmailThread(emails,subject,content);

            blastEmailThread.start();


}

问题答案:

为什么不通过不使用任何实例级别的东西使该方法成为线程安全的呢?

但是,我看不到Spring的事务管理如何适合这里。我的意思是Spring提供几个事务管理器,即DataSourceTransactionManagerJtaTransactionManagerHibernateTransactionManager这一切都是关于数据库的持久性。您将为此电子邮件发送配置什么?

我相信,首先您应该向我们展示为什么您首先担心线程安全。您很可能希望向我们展示一些相关的代码片段或其他内容。这样我们就可以为您提供一些建议。

[附录]

当您为该方法的每次调用生成一个线程并且不使用状态中的任何内容时,为什么要创建该方法synchronized。使方法同步不会以任何方式限制线程数。由于同步,可能在开始新线程之前,先前的线程可能已经完成了工作。产生线程的过程可能会变慢。

但是,应该继续进行此操作,直到发现确实有很多线程正在运行并且内存不足为止。如果您真的想在时间之前解决这个问题,那么应该选择某种阻止机制,例如Semaphore。



 类似资料:
  • 问题内容: 如果我在同一个类中有2个同步方法,但是每个方法都访问不同的变量,那么2个线程可以同时访问这2个方法吗?锁是否发生在对象上,或者是否与同步方法中的变量一样具体? 例: 2个线程可以同时执行访问类X的相同实例吗? 问题答案: 如果将方法声明为已同步(就像你通过键入进行的操作一样),则会在整个对象上进行同步,因此,从同一对象访问不同变量的两个线程仍然会相互阻塞。 如果你一次只想同步一个变量,

  • 问题内容: 在我的应用程序(node / express / redis)中,我使用一些代码同时更新数据库中的多个项目: 我可以确定在方法返回之前将执行所有这些操作吗?我关心的是异步处理。由于我不在db操作中使用回调函数,因此可以吗? 问题答案: 使用MULTI / EXEC命令创建命令队列并连续执行它们。然后使用回调发送回连贯的响应(成功/失败)。请注意,您必须使用Redis的AOF来避免这种情

  • fixedDelay,任务总是等待,直到上一个任务完成。 上面的cron将每五分钟执行一次,我的问题是:@scheduled cron是否会等待前一个任务完成后再触发下一个作业?

  • 一个问题是,我必须使整个ActionMethod异步,我不确定这会有什么影响。当前同步的基本模式如下: 有什么想法吗?

  • 我目前正在阅读Trevor Burnham的Async Javascript。到目前为止这是一本很棒的书。 他谈到这个片段和console.log在Safari和Chrome控制台中是“异步”的。不幸的是我无法复制这个。代码如下: 如果这是异步的,我会预期结果是books的结果。将console.log()放在事件队列中,直到所有代码执行完毕,然后运行它,它将具有bar属性。 虽然它是同步运行的,

  • 本文向大家介绍nodejs中require方法是同步还是异步操作?为什么?相关面试题,主要包含被问及nodejs中require方法是同步还是异步操作?为什么?时的应答技巧和注意事项,需要的朋友参考一下 同步 因为经常用到模块,并且一般都在模块顶端引入,所以把require做成同步,有助于代码整洁有序,增强可读性。 但是,I/O密集的地方尽量不要用require。所有的同步,都会阻塞Node,直到