线程求助

问题描述

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能做什么操作是你这样感觉不出来的

请问一下.主线程休息的那一秒是不是子线程运行的开始?这程序子线程就是运行了那一秒是这样子吗

时间: 2024-12-21 11:24:59

线程求助的相关文章

子程序建立socket崩溃-安卓下建立socket就崩溃,分到子线程仍然不行,求助啊

问题描述 安卓下建立socket就崩溃,分到子线程仍然不行,求助啊 原代码如下,如果我不用BUTTON去触发的话是可以建立SOCKET的,但是用上BUTTON,把建立SOCKET的方法放到子线程中,仍然exception会显示不能再主线程中使用网络操作,真心求解为什么,看了2天了,刚学JAVA,不太理解. package com.example.xlguang.wifi; import android.os.Bundle; import android.os.Handler; import an

vc-【求助】VC++ 类间/线程间通讯问题

问题描述 [求助]VC++ 类间/线程间通讯问题 遇到这样一个问题,有两个类,一个为窗口类,一个为数据处理类.窗口中按下按钮后会启动两个线程,一个线程使数据处理类中的函数开始运行,另一个使进度条控件运行.数据处理类的函数需要在运行中不断将运行的结果传递给进度条的线程,请问该如何实现? 解决方案 两个线程之间的消息可以通过 PostThreadMessage 来传递. 解决方案二: 线程创建消息循环,CWinThread,然后可以通过PostThreadMessage来发送消息,接收到在消息循环中

java-小白求助:线程问题求大神给点思路

问题描述 小白求助:线程问题求大神给点思路 ![ 我现在知道那个窗口卖的是多少号票 我想知道卖出一张票后,剩余的总票数 解决方案 你的那个变量是剩余票呢?num的话不就是直接就是num吗? 解决方案二: 解决方案三: 售票案例演示[Thread05.java] /** 功能:使用线程的注意事项 线程并发同步锁synchronized(Object){}的使用 */ public class Thread05 { public static void main(String[] args) { /

代码-求助各位大神LIstfragment中,分线程获取数据后刷新界面崩溃,用分线程加载数据后

问题描述 求助各位大神LIstfragment中,分线程获取数据后刷新界面崩溃,用分线程加载数据后 如题:代码如下,要在viewpager中的一个fragment中加载一个listview,用分线程加载数据后,handleMessage给成员变量的集合赋值后,notify,会直接崩溃 /** 报警图片 */ public class AlarmPhotoFragment extends ListFragment { private int mType = 0; private ListView

编码-C#中线程里调用winform上的控件,问题。求助。

问题描述 C#中线程里调用winform上的控件,问题.求助. 废话不多说,我直接贴代码了.程序很简单.我摘抄的网上的. 上图是个界面. 然后程序里先是一个类.如下: class ClientThread { Encoding encoding = Encoding.GetEncoding("GB2312"); private Socket client; public string data = null; private byte[] receiveBytes = new byte

多线程问题-新手求助关于Java多线程中启动线程问题

问题描述 新手求助关于Java多线程中启动线程问题 public class Example15_1 { /** * @param args */public static void main(String[] args) { // TODO Auto-generated method stub SpeakHello speakHello; SpeakNinhao speakNinhao; speakHello = new SpeakHello(); speakNinhao= new Speak

求助如何可恢复地中断线程

问题描述 java新手一个.如何人为得终止一个正在执行的线程,又可以人为的恢复??为了可以控制线程,我不得不将run方法先设置为死循环,然后在里面根据信号量quit的变化是否执行线程的方法后来发现"停止线程后"CPU的占用率升高很多,这是我不想要的.所以来求助如何中断线程并且把线程占的资源全部释放出去publicvoidrun(){while(true){if(quit==false)//判断线程是否继续运行{...................//要执行的方法try{Thread.

多线程-求助,线程控制的问题

问题描述 求助,线程控制的问题 A线程取一批数据处理,然后将结果交给B,C,D三个线程继续处理, 等B.C.D三个线程处理完成后A才能取下一批数据,同样如果A没有取下一批数据, B.C.D不能去执行. 如何用wait.notify.notifyAll合理控制,此处四个线程都是在循环执行 求指点,要怎么修改 package test; public class A extends Thread { public static Object my = null; public static Obje

c#-C#线程新手求助啊 C#线程问题

问题描述 C#线程新手求助啊 C#线程问题 class Program { static void Main(string[] args) { Thread thread1 = new Thread(new ThreadStart(fun_thread1)); Thread thread2 = new Thread(new ThreadStart(fun_thread2)); thread1.Start(); thread2.Start(); } static void fun_thread1(