`

多次start一个线程会怎么样

 
阅读更多

多次start一个线程会怎么样?

多次start一个线程会抛出java.lang.IllegalThreadStateException。看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 */
            }
        }
    }

 

分享到:
评论

相关推荐

    JAVA多线程运用

    Printer类应创建一个线程,线程读取Storage类中的值并打印值。编写程序创建Storage类的实例,并创建一个Counter对象和Printer对象操作此实例。 实验步骤: (1)、创建三个类Counter, Printer,Storage (2)、创建...

    多线程 打印1-99,100-199

    写一个多线程程序,实现以下的功能:  创建一个子线程,一次打印1到99的正整数;  创建另一个子线程,一次打印100到199的正整数;  两个线程交替打印。例如第一个线程打印1,接着第二个线程打印100,接着第一...

    c#多线程抓取网页内容

    当有线程申请后,将对应线程一列设定为当前线程编号,并将是否申请过一列设置为申请一次,这样,别的线程就无法申请该页。如果下载成功,则将内容存入内容列。如果不成功,内容列仍为空,作为是否再次下载的依据之一...

    .net c#线程超时解决方案

    .net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...

    pyqt5 的多线程(QThread)遇到的坑(二)

    被实例化的类是做数据处理的,传入和导出的的数据比较大,最少都是几万行的excel表格数据(pandas.DataFrame),而且传入的数据最少两个pandas.DataFrame表,多的时候会传入7个,而且有一些数据是公共数据,每次处理...

    Android-SmartStart一个Android智能启动框架

    框架特性:1、支持依赖关系。2、多样化任务:可选择延时任务、IO任务。3、智能多线程异步:根据CPU核数控制线程池大小。4、自学习优先级能力:根据上一次启动的任务链耗时,计算本次启动每个任务的优先级

    android使用handlerthread创建线程示例

    这样使用当然可以,但是多次使用这种方式,会创建多个匿名线程。使得程序运行起来越来越慢。因此,可以考虑使用一个Handler来启动一个线程,当该线程不再使用就删除,保证线程不会重复创建。一般会使用Handler ...

    .net C#线程超时

    .net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...

    Python多线程中阻塞(join)与锁(Lock)使用误区解析

    以下为错误代码,代码创建了5个线程,然后用一个循环激活线程,激活之后令其阻塞主线程. threads = [Thread() for i in range(5)] for thread in threads: thread.start() thread.join() 执行过程: 1. 第一次循环...

    python多线程共享变量的使用和效率方法

    python多线程可以使任务得到并发执行,但是有时候在执行多次任务的时候,变量出现“意外”。 import threading,time n=0 start=time.time() def b1(num): global n n=n+num n=n-num def b2(num): for i in ...

    Java多线程–让主线程等待所有子线程执行完毕

    因此考虑到要用多线程并发执行,在写的过程中又遇到问题,我想统计所有子进程执行完毕总共的耗时,在第一个子进程创建前记录当前时间用System.currentTimeMillis()在后一个子进程结束后记录当前时间,两次一减得到...

    解决Python中定时任务线程无法自动退出的问题

    python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程。 from ...

    php多进程框架-模拟java多线程接口simple-fork-php.zip

    获取进程状态(调用isAlive()方法)前,最好调用一个无阻塞的wait(false)进行一次回收,由于进程运行状态的判断不是原子操作,所以isAlive()方法不保证与实际状态完全一致 如果你不清楚在什么情况下...

    C#编写了一个定时小工具

    2、它是一个基于Form的计时器 3、创建之后,你可以使用Interval设置Tick之间的跨度,用委托(delegate)hook Tick事件 4、调用Start和Stop方法,开始和停止 5、完全基于UI线程,因此部分UI相关的操作会在这个计时...

    浅谈php使用curl模拟多线程发送请求

    php的curl多线程是通过不断调用curl_multi_exec来获取内容,这里举一个demo来模拟一次curl多线程并发操作。 //设置缓冲为0(也可以去php.ini设置) ini_set('output_buffering', 0); //打开输出缓冲区 ob_start(); /...

    线程间通信

    ->女 张孝祥-->男 陈琼-->女 张孝祥-->男 陈琼-->女 张孝祥-->男 张孝祥-->男 张孝祥-->男 张孝祥-->男 可以看出:并不是写入一次,就读取一次,而是有时读了多次同样的...

    API之网络函数---整理网络函数及功能

    StartPage 打印一个新页前要先调用这个函数 StartPagePrinter 在打印作业中指定一个新页的开始 WritePrinter 将发送目录中的数据写入打印机 5. API之文本和字体函数 AddFontResource 在Windows系统中添加一种...

    并行计算课程设计(报告+代码+可执行文件)

    这里主要用到了Win32 API的进入点函数,在进程中创建一个线程时,也必须给这个线程提供一个进入点函数。线程函数必须返回一个值,它将成为该线程的退出代码。使用CreateThread()函数创建线程,用...

    并行计算课程设计(代码+执行文件+文档)

    这里主要用到了Win32 API的进入点函数,在进程中创建一个线程时,也必须给这个线程提供一个进入点函数。线程函数必须返回一个值,它将成为该线程的退出代码。使用CreateThread()函数创建线程,用...

    asp.net在事件中启动线程来打开一个页面的实现方法

    在页面点击一个按钮,其目的是在按钮中做两件事情,一件需要点击按钮马上完成,另一件事情是点击按钮后做其他事情。如果按顺序一次做完感觉特别耗时,下面简单罗列一下。 protected void Button1_Click(object ...

Global site tag (gtag.js) - Google Analytics