我试图在循环中每 10 毫秒向数据库插入一次数据。那么我如何在每次插入之间等待[重复]

Posted

技术标签:

【中文标题】我试图在循环中每 10 毫秒向数据库插入一次数据。那么我如何在每次插入之间等待[重复]【英文标题】:I am trying to insert data to the database in every 10 milisecond in a loop. So how can i wait between every inserting [duplicate] 【发布时间】:2021-06-16 14:11:57 【问题描述】:
 @RequestMapping(value="/save",method = RequestMethod.POST)    
        public String save(@ModelAttribute("emp") Employee emp)    
            for(int i=0;i<5;i++) 
            dao.save(emp); 
            
            return "redirect:/viewemp";//will redirect to viewemp request mapping    
            

这里我想在方法之后等待10毫秒:

dao.save(emp); 

【问题讨论】:

【参考方案1】:

如果你想暂停,请使用java.util.concurrent.TimeUnit:

TimeUnit.SECONDS.sleep(1);

睡一秒钟或

TimeUnit.MINUTES.sleep(1);

睡一分钟。

由于这是一个循环,这会带来一个固有的问题 - 漂移。每次你运行代码然后睡眠时,你都会偏离运行状态,比如说,每一秒。如果这是一个问题,请不要使用sleep

此外,sleep 在控制方面不是很灵活。

对于每秒或延迟一秒运行任务,我会强烈推荐ScheduledExecutorServicescheduleAtFixedRatescheduleWithFixedDelay

例如,每秒运行一次方法myTask (Java 8):

public static void main(String[] args) 
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);


private static void myTask() 
    System.out.println("Running");

在 Java 7 中:

public static void main(String[] args) 
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(new Runnable() 
        @Override
        public void run() 
            myTask();
        
    , 0, 1, TimeUnit.SECONDS);


private static void myTask() 
    System.out.println("Running");

【讨论】:

以上是关于我试图在循环中每 10 毫秒向数据库插入一次数据。那么我如何在每次插入之间等待[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中每 10 秒显示一次数据

循环插入问题,重新加载页面加载?

怎样在mybatis里向mysql中插入毫秒数的时间?

我可以向 Oracle 发送“批量”插入吗?

每 10 毫秒记录 pc 音频数据而不播放

event.listener("timeupdate") 不等于当前时间/4,因为它在 chrome 中每 250 毫秒运行一次