多线程的使用

多线程,顾名思义就是多个线程来做事,速度加快许多。

多线程有哪些应用

需要区分下情况。

多线程批量执行相互独立的程序

这种最简单。 多条记录之间无关系。 for循环+线程池即可。

多个线程执行共享数据

例如抢票。
就复杂了一些,需要考虑到事务和锁。 配合信号量和回环栅栏来实现。

多线程异常处理

首先要知道,catch是无法获取到主线程的异常的。
需要实现UncaughtExceptionHandler接口。代码如下:

class ExcedptionHandler implements Thread.UncaughtExceptionHandler{
    @Override
    public void uncaughtException(Thread t,Throwable e){
        System.out.println("运行时异常;"+e.getMessage());
    }
    
    public static void main(String[] args) {
       Thread t=new Thread(new Task());
       t.setUncaughtExceptionHandler(new ExcedptionHandler());
       t.start();
    }
}

当然也可以在run方法中设置异常处理:
这种适用于ExecutorService.execute执行的方法

class Task implements Runnable{

    @Override
    public void run(){
        /**
         * 此时的UnccaughtExceptionHandler需要在此设置
         */
        Thread.currentThread().setUncaughtExceptionHandler(new ExcedptionHandler());
        System.out.println(0/0);
    }
}

submit提交的线程异常会被get()法抛出:

 public static void main(String[] args) {
       
   Thread t=new Thread(new Task());
    ExecutorService executorService = Executors.newCachedThreadPool();
    Future<?> future=executorService.submit(t);
    executorService.shutdown();
    try {
    //抛出异常
        future.get();
    }catch (Exception e){
        System.out.println("Exception"+e.getMessage());
    }
}

多线程非原子操作,如何快速的复现异常

判断>0操作,和减数操作中间的过程越长,越容易复现问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值