关于Executors.newSingleThreadExecutor()的作用!-这个代码有问题,误导了大家抱歉

 

Executors.newSingleThreadExecutor()返回一个线程池(这个线程池只有一个线程)

,这个线程池可以在线程死后(或发生异常时)重新启动一个线程来替代原来的线程继续执行下去!

import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
      
      
public class Yao implements Runnable {
          
public String name ;
      
public Yao(String name){
          
    this.name = name;
          
}
public static void foo(Yao d) {
          
      d = new Yao("Fifi");
            
}
      
 public static void main(String[] args) {
       
     Yao yao = new Yao("Max");
           
     foo(yao);
           
     System.out.println(" aDog.name.equals Max = "+ yao.name.equals("Max"));
           
     ExecutorService eService = Executors.newSingleThreadExecutor();
     eService.execute(yao);
           
 }
@Override
public void run() {
    int temp = 0;
    int i = 0;
    Random random =new Random();
    while(true){
        int j =random .nextInt(100);
              
        System.err.println("temp----------->"+temp+"  i---------------->"+(i++)+"    j------------------>"+j);
              
        try{
                  
            if(temp==0&&j>90) temp = 7/0;
                  
            Thread.currentThread().sleep(10);
                  
        }catch(Exception e){
            e.printStackTrace();
                  
            temp = 1;
                  
        }
              
              
    }
          
}
      
}

 

执行的结果如下(注意temp的值的变化和异常输出):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

aDog.name.equals Max = true

temp----------->0  i---------------->0    j------------------>18

temp----------->0  i---------------->1    j------------------>69

temp----------->0  i---------------->2    j------------------>84

temp----------->0  i---------------->3    j------------------>68

temp----------->0  i---------------->4    j------------------>88

temp----------->0  i---------------->5    j------------------>3

temp----------->0  i---------------->6    j------------------>52

temp----------->0  i---------------->7    j------------------>45

temp----------->0  i---------------->8    j------------------>47

temp----------->0  i---------------->9    j------------------>60

temp----------->0  i---------------->10    j------------------>52

temp----------->0  i---------------->11    j------------------>97

java.lang.ArithmeticException: / by zero

    at com.yao.Yao.run(Yao.java:47)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:662)

temp----------->1  i---------------->12    j------------------>6

temp----------->1  i---------------->13    j------------------>44

temp----------->1  i---------------->14    j------------------>30

temp----------->1  i---------------->15    j------------------>58

temp----------->1  i---------------->16    j------------------>87

temp----------->1  i---------------->17    j------------------>5

temp----------->1  i---------------->18    j------------------>29

temp----------->1  i---------------->19    j------------------>69

temp----------->1  i---------------->20    j------------------>37

temp----------->1  i---------------->21    j------------------>99

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值