Java并发编程的场景

特别耗时的操作

  1. 如备份数据库,可以开个线程执行备份,然后执行返回,前台不断向后台询问线程执行状态。
  2. 进度条

异步处理

  1. task a和task b要并行处理,单个线程只能串行处理,先做完task a然后再做task b。
    如果想要多个task同时执行的话,就必须为每个task分配一个线程,然后通过java虚拟机的线程调度,来同时执行多个任务。
    如果CPU是多核心的话,就可以让一个CPU执行一个线程。
    如果只有一个CPU的话,底层是按照分时复用的原则,各个线程按照时间片来获得CPU资源。
  2. 一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证1万条url路径是否存在,正常情况要循环1万次,逐个去验证每一条URL,这样效率会很低,这时可以用多线程,将1万条URL分成50等份,开50个线程,没个线程只需验证200条,这样所有的线程执行完是远小于1万分钟的。

定时任务

  1. 定期执行一些特殊任务
  2. 定期更新配置文件
  3. 任务调度(如quartz)
  4. 一些监控用于定期信息采集等

资源共享

典型的就是生产者和消费者问题。
假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中的产品取走消费。如果仓库中没有产品,则生产者可以将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止。如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止。

坚持原创技术分享,您的支持将鼓励我继续创作!