线程跟main线程的关系

代码跟运行结果如下,本人只想知道main中的isAlive在t线程启动前为什么是死的,
在t线程启动后为什么是活的。两者有什么必然的联系呢。

 public class CountOperate extends Thread {

    public CountOperate() {
        System.out.println("CountOperate start");
        System.out.println("Thread.currentThread().getName = " + Thread.currentThread().getName());
        System.out.println("Thread.currentThread().isAlive = " + Thread.currentThread().isAlive());
        System.out.println("this.getName = " + this.getName());
        System.out.println("this.isAlive = " + this.isAlive());
        System.out.println("CountOperate end");
    }

    public void run() {
        System.out.println("run start");
        System.out.println("Thread.currentThread().getName = " + Thread.currentThread().getName());
        System.out.println("Thread.currentThread().isAlive = " + Thread.currentThread().isAlive());
        System.out.println("this.getName = " + this.getName());
        System.out.println("this.isAlive = " + this.isAlive());
        System.out.println("run end");
    }

}

 public class ThreadTest {
    private static final long count = 10000001;
    public static void main(String[] args) throws InterruptedException {
        CountOperate c = new CountOperate();
        Thread t = new Thread(c);
        System.out.println("main begin t isAlive = " + t.isAlive());
        t.setName("A");
        t.start();
        System.out.println("main end t isAlive = " + t.isAlive());
    }
}

运行结果

CountOperate start
Thread.currentThread().getName = main
Thread.currentThread().isAlive = true
this.getName = Thread-0
this.isAlive = false
CountOperate end
main begin t isAlive = false
run start
main end t isAlive = true
Thread.currentThread().getName = A
Thread.currentThread().isAlive = true
this.getName = Thread-0
this.isAlive = false
run end

6个回答

你这里两次调用t.isAlive全都是线程t的死亡状态,跟main线程没有半点关系;如果要获取main线程的状态,只需在t启动前,调用Thread.currentThread().isAlive(),
而且线程之间的状态都是互相独立的,没有你说的什么必然联系

图片说明
看这个图片,新建和死亡以外,就是活的。

当程序使用new创建一个线程后,在调用start以前就是新建状态(isalive=false)
一旦调用start就是活的了。
线程调用stop()方法时或run()方法执行结束后,即处于死亡状态。

qq_41626844
qq_41626844 CountOperate start Thread.currentThread().getName = main Thread.currentThread().isAlive = true this.getName = Thread-0 this.isAlive = false CountOperate end main begin t isAlive = false run start main end t isAlive = true Thread.currentThread().getName = A Thread.currentThread().isAlive = true this.getName = Thread-0 this.isAlive = false run end
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复StackTc: 应该是1个,但是线程是切换的,所以和上面的可能不是一个。
一年多之前 回复
StackTc
StackTc run方法中的this 跟Thread.currentThread难道不是一个吗。
一年多之前 回复
StackTc
StackTc run
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复StackTc: 主线程执行完,所有的创建的线程都会收到结束信号,然后被中断。
一年多之前 回复
StackTc
StackTc 启动run方法的时候 为什么 程序结果倒数第二行是 false 不
一年多之前 回复

你的代码没有写两者啊,你调用的就是t.isAlive()啊,那t线程当然要start后才isAlive=true,因为start时启动线程。

图片说明

你在这里调用的就是t.isAlive();所以在t.start之前都是false,在t.start之后就是true了,如果你想测验主线程的话,应该调用的是Thread.currentThread().isAlive();

StackTc
StackTc 启动t线程去调用 c线程难道 c是死的吗,他false ?
一年多之前 回复
StackTc
StackTc 那为什么 。倒数第二行是false呢。
一年多之前 回复

你main函数只有启动了线程以后,isAlive()函数才会不断判断线程是否存活

你调用的就是t.isAlive()啊,那t线程当然要start后才isAlive=true,因为start时启动线程。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
main线程
It must be the last thread to finish execution. When the main thread stops, the program terminates.rn上面这句话的这种说法对吗?rnrn如果对的话,那么为什么还有一种说法叫做后台进程,只要有1个后台线程在运行,这个进程就会结束。rnrn所以我想问,如果判断一个进程结束,是看main线程还是看后台线程?
线程2--主线程(main线程)
主线程(main线程) 主线程其实就是执行main方法的线程 /*Person类*/ package com.itheima.demo05MainThread; public class Person { private String name; public Person(String name) { this.name = name; } ...
pthread_create出来的线程的pid跟main线程的一样吗?
我看上面说,pthread实际也是创建了一个进程来跑这个线程,不过同fork不同的是,pthread_create创建出来的跟原进程共享address space和资源,原文如下:rnrn但是我按照上面的例程,自己跑了下,发现实际上两者的pid是相同的,哪位大侠帮忙解释下阿?rn我跑的代码如下:rn[code=C/C++]rn#include rn#include rn#include rn#include rnrnvoid* thread_function(void* arg)rnrn fprintf(stderr, "child thread pid is %d\n", (int)getpid());rnrn while(1);rnrn return NULL;rnrnrnrnint main ( int argc, char *argv[] )rnrn pthread_t thread;rnrn fprintf(stderr, "main thread pid is %d\n", (int)getpid());rnrn pthread_create(&thread, NULL, &thread_function, NULL);rnrn while(1);rnrn return EXIT_SUCCESS;rnrn[/code]
java线程跟网络有关系?
# 听别人说网络断了,那么正在执行的线程会死吗? n如果是这样的话,为什么 无网的情况下n也可以使用线程呢?求解。
线程的基本概念及线程与进程的关系
一、深刻理解线程的基本概念 在一个程序里的一个执行路线 就叫做线程; 线程是在进程内运行的; 一切进程至少都有一个执行线程; (1)Linux下所谓的线程是用PCB模拟实现的; (2)Linux下的线程称为轻量级进程,以前所说的进程可以理解为只有一个执行流的进程 ; ...
驱动线程和干活线程的关系
一、基本概念干活:就是执行类中的方法线程类使用的相关技术:接口多态(多种实现方法)         1》一个接口         2》多种实现方法             实现Runnable的所有类:是同一类型,全部叫线程(也是对象),利用这个关系,可以实现线程实现类之间相互连接。1、看了大多数线程的文章,以为线程就是去完成任务(如取数据啊,构建登陆页)2、错,其实线程本身来说,什么也干不了,它...
Qt中线程跟信号槽的关系
NULL 博文链接:https://wan-2004.iteye.com/blog/1169265
main是一个线程
package cm.com.show; //main是一个线程 public class MainThread { public static void main(String[] args) { MyThread2 mt=new MyThread2(); new Thread(mt).start(); new Thread(mt,"线程").start();      
main线程执行顺序
假如main有如下代码:rnrnpublic static void main(String[] args)rnrnrnfor(int i=0;i<100;i++)rnrnThread t = new Thread(); //具体代码不写了,反正就是创建一个新线程的意思rnt.start;rnrnrnsystem.out.print("111");rnrnrn想问下main是不是创建完100个线程之后才开始执行后面的 system.out.print("111");??rn我的理解是这样的:main这个线程是顺序执行的,而创建线程的程序放在了循环里面,所以应该是循环完之后才执行最后的打印语句。不知道理解的有没有错误。rn
main线程会比其他线程优先结束
最近在学习volatile时,看到一篇文章关于使用volatile进行同步同步控制利用线程实现计数器,代码如下: public class Main{ private static int count = 0; public static void plus() { try { Thread.sleep(1); } ca
是不是跟线程有关?
[code=C/C++]BOOL CPage2::OnInitDialog()rnrn CDialog::OnInitDialog();rnrn m_font.CreateFont(16, 0,0,0,FW_NORMAL, 0,0,0,rn DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,rn DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, _T("Arial"));rn m_list.SetFont(&m_font);rnrn m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);rn m_list.InsertColumn(0, _T("任务"), LVCFMT_LEFT,207);rn m_list.InsertColumn(1,_T("状态"), LVCFMT_LEFT, 60);rn rn m_list.InsertItem(0,_T("A"),0);rn m_list.InsertItem(1,_T("B"),0);rn m_list.InsertItem(2,_T("C"),0);rn rn CheckStatus();rn return TRUE; rn[/code]rnrn其中CheckStatus();的作用是查询注册表键值并且填到表格第二列。rn结果发现启动程序后查询到的值有一部分是错的。rnrn然后我在CheckStatus();前Sleep(1);似乎查到的就是对的了。rn我觉得可能是因为如果不Sleep,CheckStatus();没有来得及查询键值,因此结果错误。Sleep(1)后将什么线程挂起了,因此CheckStatus()有足够时间了。rn但还不是很明白,请教一下为什么会这样。另外,1ms应该足够吧?
线程跟锁的区别
今天面试的时候被问到线程跟锁的区别?》rn请教各位!
线程跟数据库的讨论?
请问高手们:rn为了提高对数据库中数据的查询或更新的速度就一定rn要用线程吗?但是线程的同步性,又是比较复杂的。rn或者说是不是有更好的的方法呢?
Timer跟线程区别
设置了timer1的interval 为 1000。在Tick事件中写了方法,现在为了不影响客户界面的响应速度(比如在执行Tick事件的同时,用户在操作界面进行输入)。是否应该对timer1进行线程处理 ,如何处理。
请问Java线程和操作系统线程之间的关系?
Java线程和操作系统线程之间是一对一的关系吗?rnJava线程的调度是否依赖于操作系统?rnJVM的调度器和调度策略完成什么功能?rnrn下面是我的理解,不知道对不对,请指点:rnrn一个java程序里的多个线程由虚拟机调度执行,rn而这些线程与操作系统内虚拟机之外的其他线程之间的调度则由操作系统决定。rn这样的话java线程在虚拟机中的优先级就必须和操作系统线程优先级有一个对应关系。
进程以及线程概述+进程与线程的关系
<span style="color:#333333;font-size:14px;background-color:#FFFFFF;">Java EE是 J2EE的一个新的名称,之所以改名,目的还是让大家清楚J2EE只是Java企业应用.随着WEB和EJB容器概念诞生,使得软件应用业开始担心SUN的伙伴们是否还在</span><span style="color:#333333;font-size:14px;background-color:#FFFFFF;">上不断推出翻新的标准框架</span>
关于线程运行和线程内核对象的关系
每个线程都有其内核对象,内核对象中有对线程引用的计数。当用GetCurrentThread()等函数或取线程句柄时,计数就会增加;当用CloseHandle()释放线程句柄时,计数就减少。计数减为0时,内核对象就被释放。rnrn那么这个内核对象的计数和线程的运行有什么关系?rn若计数减为0时,线程还没运行完,系统会怎么处理?rnrn
DestroyWindow 与 线程 有关系
最近用destroywindow方法发现的怪问题.rnrn大家知道从程序的执行情况看: 调用destroywindow会触发 OnDestroy消息。可是跟踪在代码里却发rnrn现VC的CAll stack却没用 destroywindow. 但是断点设在destroywindow后,可以从OnDestroy返回到rnrn该断点。rnrn难道OnDestroy使用了另外一个线程?还是vc CAll stack有问题。 这样对MFC程序的跟踪很不利?rnrn不知遇到相同的问题? rn
相对路径 和线程的关系?
在MFC中,窗体线程DLG下的函数调用某一个普通自定义类的函数,相对路径:char *p = "../Result/STT-yc-EXM-353842020018295-12.22.2008-Fat.bin";作为函数的参数,调用成功.rnrn但是在DLG外我又另外建立了一个工作者线程UINT ReadBackFATDataThread(LPVOID pParam),在此线程调用同一个类中的函数,也以同样的相对路径作参数,但是调用时总是提示:不能找到相对路径rnrn"../Result/STT...Fat.bin"中Result文件夹的上一级目录就是.exe可执行文件所以在文件夹Output.rnrn请个位指点,谢谢
信号与线程的关系
POSIX 标准:    0.给线程发送信号用pthread_kill() 1.信号处理函数必须在多线程进程的所有线程之间共享,但是每个线程要有自己的挂起信号集合和阻塞信号掩码。 2.POSIX 函数 kill/sigqueue 必须面向进程,而不是进程下的某个特定的线程。 3.每个发给多线程应用的信号仅递送给一个线程,这个线程是由内核从不会阻塞该信号的线程中随意选出来的。 4. 如果发送一个致...
进程 和 线程 之间的关系
进程定义:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。 线程定义:线程是进程中的一个实体,作为系统调度和分派的基本单位。我的理解就是:一个进程中可以有多个线程。 注意:1.多个进程有独立的空间            2.多个线程共享一块空间,一个线程销毁可能导致其他线程崩溃 线程有三个基本状态:就绪 运行  阻塞
进程与线程的关系讨论
今天看到一句话"进程是分配资源的基本单位,线程是调度与执行的基本单位.线程对进程的整个主存空间都有存取权限"rnrn请问大家平时在设计多线程程序时"线程对进程的整个主存空间都有存取权限"这句话的具体体现.我好像没有感觉到一样.rnrn麻烦大家举举例子.在这里谢过大家了
runloop和线程的关系
讲师风格:老不正经的人格出色地完成一次又一次的研发和教学任务.因其风趣幽默的授课方式,深受学员喜爱.收到一致好评.n<p>n 课程涵盖知识点:Runtime、RunLoop、Runtime与Runloop底层原理n</p>n编译器:Xcode使用语言:Object-C <br />n工具:Xcode10.1<br /><div>n <br /></div>
进程和线程的区别和关系
进程和线程的区别和关系,网上和书上说的都很专业,不是很好理解。
线程和事务的关系
1、会话可以创建多个事务 比如:使用客端连接数据库,这样你就可以执行很多个事务了2、一个事务只能由一个会话产生 在数据库里的事务,如果在执行的SQL都是由会话发起的,哪怕是自动执行的JOB也是由系统会话发起的3、一个事务可能会产生一个或多个线程 比如RMAN备份,是可以创建多个线程可加快备份速度4、一个线程在同一时间内只能执行一个事务 而一个线程,在没结束当前事务是无法释放资源来执行第二个事
线程与进程的关系
概述 进程是资源分配的基本单位,进程由线程组成。 线程是系统执行调度的基本单位,线程隶属于进程。 为何引入线程 1、进程在同一时间只能干一件事,比如我们在上课的时候,往往要耳朵听课,手记笔记,脑子思考,如果套用进程的机制,那么我们听课的时候也不能记录笔记,更不能思考。 2、当进程某个操作阻塞时,整个进程就会挂起,也就是说当老师讲课时需要思考的时候,我们也还只能听课,不能思考也不能记录
Android 进程和线程关系
简单介绍一下,进程和线程的关系。Processes and Threads进程和线程之间的关系. 一个进程里面可以有多个线程. 进程如果挂了, 线程就没了进程优先级Foreground process 前台进程优先级别最高,即便系统内存不足的时候 也不会杀死前台进程 Visible process 可见进程优先级稍为低一点 Service process 服务进程存活时间比较长 . 里面的子线
线程与输入法的关系
在有后台线程运行的系统中,为何在切换输入法时,系统会停止响应消息,但后台线程仍在运行。rn谢谢!1
线程与进程的关系和区别???
请高手讲解一下,最好能举例说明,多谢!
问:线程与对象的关系??
问:线程与对象的关系??
线程和窗口的关系
Windows的API(Application Programming Interface,应用程序编程接口),是Windows 操作系统提供给应用程序的大量函数,学习本课程,不仅可以掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架的学习奠定扎实的基础,同时是否熟练的掌握Windows API开发,也是企业考量优秀程序员一个非常重要的指标!
进程和线程之间的关系
详细讲解进程和线程之间的区别,方便初学者能更深透的理解
main线程和main调用的线程,JVM的执行这两个线程是无序的??(附代码)
[code=Java] class MyThread extends Threadrn rn public void run()rn rn for(int i=0;i<1000;i++)rn rn System.out.println("Print "+i); rn rn rnrn rnclass testingrn rn public static void main(String []args) rn rn new MyThread().start(); rn System.out.println(Thread.currentThread().getName()); rn System.exit(0); rn System.out.println("Main() exits"); rn rn rn[/code]
回调函数和线程的关系
1个回调函数就是一个线程吗?
c++timer和线程的关系
c++中,我在线程A中创建了一个timer,timer的回调函数是在A线程中执行的吗,还是在timer自己的线程中执行的?
消息框与线程的关系
如下列线程,在线程的尾部加一个消息框,当线程运行到弹出消息框时,如果将消息框关闭线程就停止运行,如果没有关闭就一直运行。如何实现不用消息框就能让线程一直运行呢?rnvoid ThreadProc(LPVOID lpNoData)rnrn OnbuttonGetDevice( rectWindow);//自定义的一个函数;rn MessageBox(NULL,"","",MB_OK);rn
进程与线程的关系
   比如有一个大工厂,里面每一个车间都是一个‘进程’,车间里的工人就是‘线程’,车间里有一个‘公共 厕所’。那么,当工人上厕所时要锁上门,人少时直接就完事了;但人多时只能在厕所门口等,等里面的人出 来才能进去(锁着门呢)。当然这只是一般的情况,并没有考虑优先级等。 ...
程序、进程、线程的关系
创建一个Java线程常见的有两种方式: 1.继承Thread类 两种表示方法: (1).外部类 import java.util.Date; public class Test1 { public static void main(String[] args) { //启动新...
简述进程与线程的关系
一. 定义        进程:进程是能在系统中独立运行并作为资源分配的基本单位,是CPU分配资源的最小单位,它包括独立的地址空间,资源以及一至多个线程。        线程:线程是进程中的一个实体,是CPU调度的最小单位。二. 两者关系            其实线程和进程可以理解成父级与子级的关系,一个进程可以包含一个或者多个线程。进程主要是负责保护和管理资源,而线程主要负责是CPU执行代码的...
java线程栈状态详解
在到处java线程栈的时候,会看到线程栈第一行最后都有一个状态说明,下面就说一下这几种状态是什么情况下出现的,理解java线程栈对于分析问题非常有帮助;       /** * 一. waiting for monitor entry *  * BLOCKED (on object monitor) * 等待进入synchronized临界区 *  * 二. in Object.wai...
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法