问题描述
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;namespaceSubThread{classProgram{staticvoidMain(string[]args){Console.WriteLine("子线程启动.停止.终止.阻塞综合演示...");SubThreadSThread=newSubThread();ThreadThreadS=newThread(newThreadStart(SThread.SubThreadFunc));Console.WriteLine("子线程启动...");ThreadS.Start();Console.WriteLine("子线程状态{0}",ThreadS.ThreadState);Thread.Sleep(1000);Console.WriteLine("主线程睡眠1秒..");ThreadS.Abort();Console.WriteLine();Console.WriteLine("子线程状态{0}",ThreadS.ThreadState);Console.WriteLine("子线程终止..");Console.WriteLine("SThread.SubThreadFunc被终止..");try{ThreadS.Start();Console.WriteLine("尝试启动SThread.SubThreadFunc线程..");}catch(ThreadStateExceptionex){Console.WriteLine(ex.Message);Console.WriteLine("SThread.SubThreadFunc已经终止线程不能重新被启动");}Console.ReadKey();}}publicclassSubThread{publicvoidSubThreadFunc(){inti;i=0;do{i=i+1;Console.WriteLine("子线程正在运行...{0}",i);}while(1==1);}}}
请问一下这里为什么线程会终止?当主线程睡眠一秒的时候,子线程开始运行.运行的话,不是只运行SubThread类的SubThreadFunc方法吗为什么会运行到Main函数的ThradS.Abort()来终止?关于线程的执行方式.可以详细说说吗谢谢.
解决方案
解决方案二:
这才是线程!!主线程创建子线程后,主线程并没有waitone开始子线程后,主线程继续执行。
解决方案三:
引用1楼lpingz的回复:
这才是线程!!主线程创建子线程后,主线程并没有waitone开始子线程后,主线程继续执行。
那就是主线程执行到ThreadS.Abort();这一步然后就结束了.子线程只执行了一秒是这样吧?刚接触.见谅.
解决方案四:
去看一下关于线程操作的资料吧!很详细的
解决方案五:
引用3楼lsc19890723的回复:
去看一下关于线程操作的资料吧!很详细的
请问你有相关的资料吗?我这段代码是书上看到的解释并不算详细.
解决方案六:
你这样的操作没有什么实际的意义线程在你所给的1s能做什么操作是你这样感觉不出来的
解决方案七:
就是主线程把子线程杀了嘛其实就是给系统一个消息,系统做了他
解决方案八:
多线程就是多个线程并发执行啊,表面上看是同时执行的,其实如果你看过操作系统的话,他们还是轮流使用CPU的,只是时间太短,以至于无法感觉到。可以找本多线程编程的书和操作系统的书看看。
解决方案九:
引用5楼fengyarongaa的回复:
你这样的操作没有什么实际的意义线程在你所给的1s能做什么操作是你这样感觉不出来的
请问一下.主线程休息的那一秒是不是子线程运行的开始?这程序子线程就是运行了那一秒是这样子吗