十一、多线程的应用场景

 

我们有时貌似熟悉异步、多线程、任务和并行,但有时又不一定特别清楚它们之前的本质区别,甚至在很多复杂的场景下乱用一气。下面我就结合场景来说明在什么情况下该采用什么。同时,还讲解下如何优雅地控制线程,处理任务和并行中的异常。

 

 一、在什么场景可以使用多线程

  • 想要同时处理多件事:单线程处理不了的,必须使用多线程。(类似于分身术)
  • 多个线程分解大任务:用单线程可以做,但是使用多线程可以更快。(类似于左右开弓)

例1:同时处理2件事

          场景描述: 执行实际工作20秒钟,20秒时间到结束执行。

public class CalculatePrimes extends Thread{
 //使用两个线程,一个用于计时(线程会休眠20秒然后设置一个主线程要检查的标志finished),一个用于执行实际工作。在执行实际工作的线程启动前启动计时线程。

//达到20秒钟主线程将停止。
 public static final int SECONDS = 20000;
 
 public volatile boolean finished = false;
 
 public void run(){
  System.out.println("开始执行实际工作啦");
  for (long i = 0l; i < Long.MAX_VALUE; i++) {
   if(finished){
    break;
   }
   if(i%100000000==0){
    System.out.println("i:"+i);
   }
  }
  System.out.println("结束执行实际工作啦");
 }
 
 public static void main(String[] args){
  //通过实例化CalculatePrimes类型的对象来创建线程。
  CalculatePrimes calculator = new CalculatePrimes();
  calculator.start();
  try{
   System.out.println("执行Thread.sleep前,时间为:"+System.currentTimeMillis());
   Thread.sleep(SECONDS);
   System.out.println("执行Thread.s

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值