zoukankan      html  css  js  c++  java
  • 一个线程两次或者多次调用start()方法会怎么样

    会抛出IllegalThreadStateException()


    示例代码如下:

    public class Main{
      public static void main(String[] args){
    
        Thread t1 = new Thread(()->{System.out.println("this is a thread");});
    
        t1.start();
        t1.start()
      }
    
    }

    之所以会抛出异常,是因为在start()函数里,一开始会检查线程状态,如果线程状态不为0,会抛出该异常。线程的状态初始值为0,当第一次进入start()方法后,会修改线程状态,使其不为0,第二次进入start()函数,那么肯定就抛出异常了

    public synchronized void start() {
            /**
             * This method is not invoked for the main method thread or "system"
             * group threads created/set up by the VM. Any new functionality added
             * to this method in the future may have to also be added to the VM.
             *
             * A zero status value corresponds to state "NEW".
             */
            if (threadStatus != 0)
                throw new IllegalThreadStateException();
    
            /* Notify the group that this thread is about to be started
             * so that it can be added to the group's list of threads
             * and the group's unstarted count can be decremented. */
            group.add(this);
    
            boolean started = false;
            try {
                start0();
                started = true;
            } finally {
                try {
                    if (!started) {
                        group.threadStartFailed(this);
                    }
                } catch (Throwable ignore) {
                    /* do nothing. If start0 threw a Throwable then
                      it will be passed up the call stack */
                }
            }
        }
  • 相关阅读:
    python之模块与包
    python之模块4
    python之模块3
    python之模块2
    Day10:Linux基础:搭建samba服务
    Day9:Linux基础:程序管理
    Day8: Linux基础片:网络配置
    番外篇:硬盘分区、创建文件系统
    Day7: Linux基础片:系统监控
    Day6: Linux基础片:文件压缩、Vim用法
  • 原文地址:https://www.cnblogs.com/Chsy/p/12708694.html
Copyright © 2011-2022 走看看