`

多次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 */
            }
        }
    }

 

分享到:
评论

相关推荐

    python 多线程实现多个网址的多次快速访问

    当运行这个程序时,它会创建多个线程,每个线程都会对指定的URL进行多次访问。由于网络请求可能有延迟,所以多线程可以同时进行,从而加快总体的访问速度。然而,需要注意的是,过多的并发请求可能会导致服务器压力...

    实现一个数据单元,包括学号和姓名两部分。编写两个线程,一个线程往数据单元中写,另一个线程往出读。要求每写一次就往出读一次。

    本实验的任务是设计并实现一个数据单元,该单元包含学号和姓名两个字段,并且使用两个线程,一个用于写入数据,另一个用于读取数据。这种设计模式被称为“生产者-消费者”问题,是多线程编程中的经典案例。 首先,...

    Revit二次开发 c# 多线程处理

    在需要多线程的地方,我们可以创建一个新的线程或者使用`Task`类。在新线程中,我们可以执行那些不会直接修改Revit模型的数据预处理或计算任务。例如: ```csharp public void PerformBackgroundTask() { ...

    C#多线程学习(二)如何操纵一个线程.pdf

    C#多线程学习(二)如何操纵一个线程 在现代软件开发中,多线程编程是一个非常重要的概念,它允许程序同时执行两个或多个部分,以提高应用程序的效率和响应能力。C# 作为一门现代编程语言,提供了强大的多线程支持...

    C# 多线程实例多线程实例多线程实例

    - `Mutex`:互斥量,一次只允许一个线程访问资源。 - `Semaphore`:信号量,限制同时访问资源的线程数量。 - `Monitor`:基于锁的对象,使用`lock`关键字实现。 - `Barrier`:屏障,用于等待一组线程到达特定点...

    C# 多线程互斥 两个线程交替工作

    对于两个线程交替工作,一个常见的应用场景是控制两个线程按照一定的顺序执行,比如线程A执行一次,然后线程B执行一次,如此循环。以下是一种可能的实现方法: 1. 使用`ManualResetEvent`或`AutoResetEvent`对象...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    - **Mutex**:互斥锁,一次只有一个线程可以获取锁并执行相关代码。 - **Monitor**:基于监视器的对象锁,通常用于控制对对象的访问。 - **Semaphore**:信号量,用于限制同时访问特定资源的线程数量。 - **Lock...

    Java多线程机制(讲述java里面与多线程有关的函数)

    线程联合(Join)是让一个线程等待另一个线程完成后再继续执行,通过调用`join()`方法实现。 9.11 守护线程: 守护线程(Daemon)是一种不阻止程序退出的线程,如垃圾收集器就是守护线程。当所有非守护线程结束时,...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)完整源码

    实例可能演示了如何定义一个线程入口方法,并通过`new Thread()`创建新线程对象,然后调用`Start()`方法启动线程。 2. **线程的基本使用**:这通常包括线程的启动、挂起、恢复和停止。实例可能展示了如何使用`Join...

    JAVA多线程运用

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

    python多线程定时器

    此外,Python的全局解释器锁(GIL)限制了在同一时刻只有一个线程执行Python字节码,这可能会影响多线程的性能。在CPU密集型任务中,多线程可能无法充分利用多核处理器的优势。在这种情况下,可以考虑使用多进程(`...

    java多线程分页查询

    多线程是指在一个程序中包含多个可以并发执行的线程,这些线程共享相同的内存空间。通过合理利用多线程技术,可以显著提升程序的运行效率和响应速度。在Java中,可以通过继承`Thread`类或者实现`Runnable`接口来创建...

    多线程与单线程的对比(采用CreateThread)

    单线程是指一个程序只有一个执行流,它按照顺序执行任务,一次只能做一件事。这样的程序简单且易于管理,但可能在处理复杂并发任务时效率较低,因为它不能充分利用多核处理器的资源。 相比之下,多线程允许程序同时...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)201902

    1. ** Monitor类**:`Monitor.Enter()`和`Monitor.Exit()`方法用于进入和退出临界区,确保一次只有一个线程执行临界区内的代码。 ```csharp lock (object) { // 临界区代码 } ``` 这里的`lock`语句是对Monitor类的...

    JAVA多线程机制

    ReentrantLock是可重入的,即一个线程可以多次获取同一个锁。它还支持公平锁和非公平锁,以及可中断和定时等待。 4. java.util.concurrent并发工具类:如Semaphore(信号量)、CyclicBarrier(回环屏障)和...

    简单多线程程序

    多线程是指在一个进程中同时运行多个独立的执行线程。每个线程都有自己的程序计数器、栈和局部变量,它们共享进程的全局变量和系统资源。通过多线程,程序可以同时执行多个任务,如数据读取、处理和用户交互,从而...

    C#多线程处理实例

    然而,当多个线程共享数据,并且其中一个或多个线程要修改数据时,可能会出现无法预知的结果。如果一个线程正在更新数据,另一个线程也试图更新,那么数据所反映的就第二次更新操作之后的结果。所以可通过一次只允许...

    .NET多线程编程.NET多线程编程

    - **Mutex**:互斥锁,一次只允许一个线程访问资源。 - **Semaphore**:信号量,可以限制同时访问资源的线程数量。 - **Monitor**:监视器,使用`lock`关键字实现,确保同一时间只有一个线程执行特定代码块。 - ...

Global site tag (gtag.js) - Google Analytics