首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

新线程的thread.start()方法是否立即返回到当前线程?

新线程的thread.start()方法不会立即返回到当前线程。当调用thread.start()方法时,新线程会被创建并开始执行,但是当前线程会继续执行下面的代码,而不会等待新线程执行完毕。新线程的执行时间取决于系统调度和线程优先级等因素。如果需要等待新线程执行完毕,可以使用thread.join()方法来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

文章目录 一、判定当前线程是否是主线程 二、子线程中执行主线程方法 三、主线程中执行子线程方法 一、判定当前线程是否是主线程 ---- 在 Android 中 , 如果要判定当前线程是否是主线程 , 可以使用如下方法进行判定...; 调用 Looper getMainLooper() 静态方法获取 mainLooper , 调用 Looper myLooper() 静态方法获取 myLooper , 对比二者是否相等...; Looper.getMainLooper() 方法获取总是本进程线程 Looper 对象 ; Looper.myLooper() 方法获取当前 Looper 线程 Looper 对象 ,...如果当前线程是主线程 , 那么这两个 Looper 对象是相同 ; // 判断当前线程是否是主线程 // 获取 mainLooper 与 myLooper...---- 获取主线程 Looper , 通过 Looper 创建对应 Handler , 然后通过该 Handler 向其发送 Runnable 任务即可 ; 一个线程只能有一个 Looper 和

1K10
  • 调用interrupt()方法仅仅是在当前线程中打了一个停止标记,并不是真的停止线程

    调用interrupt()方法仅仅是在当前线程中打了一个停止标记,并不是真的停止线程 首先看一个例子: public class MyThread extends Thread { @Override...应用程序并不会退出,启动线程没有因为调用interrupt而终止,可是从调用isInterrupted方法返回结果可以清楚地知道该线程已经中断了。那为什么会出现这种情况呢?...到底是interrupt方法出问题了还是isInterrupted方法出问题了?在Thread类中还有一个测试中断状态方法(静态)interrupted,换用这个方法测试,得到结果是一样。...该方法实际上只是设置了一个中断状态,当该线程由于下列原因而受阻时,则其中断状态将被清除,它还将收到一个 InterruptedException: (1)如果线程在调用 Object 类 wait...(2)如果该线程在可中断通道上 I/O 操作中受阻,则该通道将被关闭,该线程中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。

    57300

    Java 多线程 Thread 和 Runnable

    另外,Java可以进行多进程编程,启动一个子进程,就相当于一个虚拟机....ThreadGroup中,线程状态受到ThreadGroup影响 一个线程生命周期结束,再调用start方法是不允许,Terminated无法回到runnable/running状态. thread.start...() TimeUnit.SECONDS.sleep(2) thread.start() Thread中run方法就是空实现,run和start采用模板设计方法,run本身就是空方法,留实现类实现逻辑...线程join Thread join同样是可中断方法, 如果其他线程执行该线程interrupt方法,同样会捕捉到中断信号,并将标识位擦除. join某个线程A,会使当前线程B处于等待,直到A生命周期结束...线程最好退出方式捕获中断异常进行退出, t.interrupt(); 如果在线程中执行某个可中断方法,则可以通过捕获中断信号来决定是否退出. 即在catch中决定是否退出 8.

    51310

    1、线程与进程区别

    处于就绪状态线程并不一定立即运行run()方法线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。...阻塞状态线程运行过程中,可能由于各种原因进入阻塞状态: 1>线程通过调用sleep方法进入睡眠状态; 2>线程调用一个在I/O上被阻塞操作,即该操作在输入输出操作完成之前不会返回到调用者;...-  为了确定线程当前是否存活着(就是要么是可运行,要么是被阻塞了),需要使用isAlive方法。...只是CPU调度会有限分配 t1.setPriority(10); t2.start(); } } Yield方法 Thread.yield()方法作用:暂停当前正在执行线程,并执行其他线程...(可能没有效果) yield()让当前正在运行线程回到可运行状态,以允许具有相同优先级其他线程获得运行机会。因此,使用yield()目的是让具有相同优先级线程之间能够适当轮换执行。

    49520

    C#学习笔记 线程操作

    ($"是否线程线程:{thread.IsThreadPoolThread}"); Console.WriteLine($"当前线程优先级:{thread.Priority}"); Console.WriteLine...($"当前线程状态:{thread.ThreadState}"); Console.WriteLine("-------------------"); } 创建带有参数线程线程传递方法不仅可以是无参...,因为它是后台线程:"); PrintThreadInfo(thread); thread.Start(); } 线程优先级 .NET线程本来是想设计为和Windows线程不同线程模型...大多数时候,主需要使用线程池中线程即可。 线程池是一个线程集合,里面包含了一定线程,需要使用时候可以向线程池申请线程线程使用完毕之后不会被销毁,而是会回到线程池中一倍下次使用。...,在不需要使用状态参数时候可以为null;第三个参数dueTime是指计时器多长时间之后会启动,值为0的话立即启动,值为Timeout.Infinite的话永远不会启动;第四个参数period是指计时器经过多长时间再次调用回调方法

    46620

    Java 高级 --- 多线程快速入门

    () 获取当前线程名称 sleep(long mill) 休眠线程 Stop() 停止线程, 常用线程构造函数 Thread() 分配一个 Thread 对象 Thread(String name...处于就绪状态线程并不一定立即运行run()方法线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。...-  为了确定线程当前是否存活着(就是要么是可运行,要么是被阻塞了),需要使用isAlive方法。...方法作用:暂停当前正在执行线程,并执行其他线程。...(可能没有效果) yield()让当前正在运行线程回到可运行状态,以允许具有相同优先级其他线程获得运行机会。因此,使用yield()目的是让具有相同优先级线程之间能够适当轮换执行。

    44450

    【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)

    使用 interrupt() 方法停止线程 (1) 线程无法立即停止 interrupt() 使用说明 :  -- 打标记 : 调用该方法, 不能马上停止该线程, 只是在当前线程打了一个停止标记; 代码示例...;,③ 连续两次调用该方法, 第二次返回 false, ④ 静态方法 : 该方法是测试当前线程中断标志, 在哪个线程中调用, 就是判定哪个线程中断标志, 不管调用主体是哪个线程; -- 2. isInterrupted...() 方法测试1 : 测试 interrupted 方法判断是否已经中断效果; -- 测试代码 :  public class InterruptedDemo1 { public static...总结分析 : isInterrupted() 方法 只 判断 被调用对象 该对象线程 线程中断 状态, 不管线程真实运行状况, 即使当前线程正在运行, 但是线程调用了 interrupt() 方法...立即停止 : 调用 stop() 方法停止线程, 比较暴力, 会立即停止当前线程; -- 2.

    3.2K20

    Thread实现及方法

    描述:调用interrupt方法不会真正结束线程,只是在当前线程上打上一个停止标记。...: 是否停止1:true 是否停止2:false interrupted方法会检测当前运行线程是否已经中断,此方法会清除中断状态,也就是说,假设当前线程中断状态为true,第一次调此方法,将返回true...此时如果调用isInterrupted()方法,将会得到true结果。 isInterrupted:检测当前线程是否已经中断,此方法与下一方法区别在于此方法不会清除中断状态。...interrupted:检测当前运行线程是否中断,此方法会清除中断状态,也就是说,假设当前线程中断状态为true,第一次调此方法,将返回true,表明的确已经中断了,但是第二次调用后,将会返回false...ThreadGroup中; 一个线程生命周期结束后,也就是到了TERMINATED状态,再次调用start方法是不允许,也就是说TERMINATED状态是没有办法回到RUNNABLE/RUNNING状态

    80641

    Java并发学习之线程状态及Thread常用方法详解

    启动是否又是运行呢?本节则主要集中在线程各个状态解释以及状态变迁原因 先来一个图,说明下线程五个状态 ? 1....(注意调用之后不会立即执行) 这个方法主要目的就是告诉系统,我们线程准备好了,cpu有空了赶紧来执行我们线程 ---- 2. run 方法 这个就有意思了,我们采用继承Thread类来创建线程时,...wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中线程 通常我们执行wait方法是因为当前线程执行,可能依赖到其他线程,如登录线程中,若发现用户没有注册,则等待...action ---- 5. yield 方法 暂停当前正在执行线程对象,并执行其他线程 yield()应该做是让当前运行线程回到可运行状态,以允许具有相同优先级其他线程获得运行机会。...Thread使用注意 线程执行业务逻辑,放在run()方法中 使用 thread.start() 启动线程 wait方法需要和notify方法配套使用 守护线程必须在线程启动之前设置 如果需要等待线程执行完毕

    70670

    张三并发编程实践:创建高效线程世界

    volatile int threadStatus = 0; // 线程是否为守护线程 private boolean daemon = false; // 线程是否已经启动...它只包含一个run()方法,用于执行线程任务。Runnable接口主要职责是定义线程要执行操作。示例通过实现Runnable接口创建一个线程。...线程调度器将尽可能快地重新调度当前线程,但它并不保证一定会立即执行。...调用某个线程join()方法会使当前线程暂停执行,直到被调用线程执行完毕。...当你调用一个Thread对象start()方法时,Java虚拟机会创建一个线程,并调用该线程run()方法来执行任务。需要注意是,不要直接调用run()方法来启动线程

    34021

    如何创建并运行Java线程

    start方法就会立即返回,而不会等待到run方法执行完毕才返回。...Running"); } }; thread.start(); 当线程run方法执行以后,计算机将会打印出字符串”Thread Running”。...因为线程池可以有效管理实现了Runnable接口线程,如果线程池满了,线程就会排队等候执行,直到线程池空闲出来为止。而如果线程是通过实现Thread子类实现,这将会复杂一些。...但是,事实上,run()方法并非是由刚创建线程所执行,而是被创建新线程当前线程所执行了。也就是被执行上面两行代码线程所执行。...可以通过以下方式得到当前线程引用: Thread.currentThread(); 因此,通过如下代码可以得到当前线程名字: String threadName = Thread.currentThread

    55250

    如何正确中断线程?你姿势是否正确

    线程接收到通知之后会根据自身情况判断是否需要停止,它可能会立即停止,也有可能会执行一段时间后停止,也可能根本就不停止。 那么Java为什么要选择这种非强制性线程中断呢?...中断线程案例,run方法中通过判断当前线程是否中断,并且count是否大于2000来进行循环。...「执行结果:」 「案例场景」: 在进行一些后台任务通过线程时候,如果在循环中遇到线程中断异常,我们需要终止当前任务,并且告诉客户端当前任务执行失败是哪条记录,这种情况下就可以通过异常中再次中断方式来停止线程...false,那么我们可以在异常中手动再次中断当前线程,那么就可以完全停止线程任务。...其实还有其他一些方法来停止线程,比如stop(),这类方法已被舍弃,这种强制停止可能会引起线程数据安全问题,所以已经不再推荐使用了。

    62920

    Java多线程三:线程中断

    线程运行,肯定就会有线程中断,在Java语言中,线程中断是一种协作机制,通过对线程设置中断标记,告知对应线程,根据中断标记来决定是否需要中断当前线程。...,等待获取锁过程中,即使调用了interrupt方法,将当前线程中断标志置为true,当前线程既不会被中断,也不会抛出InterruptedException。...isInterrupted方法,这里有可能会是true, 原因在于当sleep方法抛出异常时候,才将线程中断状态置为false,当调用了interrupt方法时候,线程状态为true。...但是我们可以根据线程中断标志,来判断当前线程是否可以继续运行。 对线程稍微改造一下,让他在线程中断为true时候退出线程运行。...JDK源码中解释:测试当前线程是否被中断。该方法清除线程中断状态。

    47630

    初学者第61节之线程停止详解(三)

    因为stop会解除由线程获取所有锁定,当在一个线程对象上调用stop()方法时,这个线程对象所运行线程就会立即停止,假如一个线程正在执行:synchronized void { x = 3; y =...."); thread.start();//启动线程 Thread.sleep(3000);//设置2秒之后在停止线程 thread.stop();//设置停止线程状态 结果: 第1次执行,线程名称A...然而interrupte()方法并不会立即执行中断操作;具体而言,这个方法只会给线程设置一个为true中断标志(中断标志只是一个布尔类型变量),而设置之后,则根据线程当前状态进行不同后续操作。...如果,线程当前状态处于非阻塞状态,那么仅仅是线程中断标志被修改为true而已;如果线程当前状态处于阻塞状态,那么在将中断标志设置为true后,还会有如下三种情况之一操作: 如果是wait、sleep...通过上面的分析,我们可以总结,调用线程interrupted方法,其本质只是设置该线程中断标志,将中断标志设置为true,并根据线程状态决定是否抛出异常。

    37610

    1.7停止线程

    线程停止:在线程处理完任务之前,停掉正在做操作,也就是放弃当前操作。 在java中有三种方法可以实现线程停止: 使用退出标志,使线程正常退出,也就是当run方法执行完后线程终止。...1.7.1停不了线程 本例中调用interrupt()方法来停止线程,但是interrupt()方法并不像循环中break关键字一样可以立即起效,interrupt()方法仅仅是在当前线程中打了一个停止标记...1.7.2判断线程是否是停止状态: 在JavaSDK中,Thread.java类里提供了两种方法判断线程是否停止 ? ?...分析:从打印结果来看线程并没有中断。this.interrupted()解释是:测试当前线程是否中断,根据代码可以判断当前线程为“main”线程。这里肯定是没有中断,所以返回false。...为什么这里第二次判断时候返回false呢? interrupted()方法解释:测试当前线程是否已经中断。线程中断状态由该方法去除。

    1.8K00

    并发编程之多线程

    而不用stop 同步异步 同步:代码从上往下执行 异步:开一条执行路径,独立进行执行,各个线程互不影响 获取线程对象及名称 常用线程api方法 start() 启动线程 currentThread(...、 Thread() 分配一个 Thread 对象 Thread(String name) 分配一个 Thread对象,具有指定 name正如其名 Thread(Runable r) 分配一个...thread.Join()把指定线程加入到当前线程,可以将两个交替执行线程合并为顺序执行线程。...只是CPU调度会有限分配 t1.setPriority(10); t2.start(); } } Yield方法 Thread.yield()方法作用:暂停当前正在执行线程,并执行其他线程...(可能没有效果) yield()让当前正在运行线程回到可运行状态,以允许具有相同优先级其他线程获得运行机会。因此,使用yield()目的是让具有相同优先级线程之间能够适当轮换执行。

    28010
    领券