using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace 线程测试
{
class MyInterrupt
{
public static Thread sleeper;
public static Thread awaker;
public void SleepThread()
{
for (int i = 1; i < 10; i++)
{
Console.Write(i + ",");
if (i == 4 || i == 8)
{
Console.WriteLine("Thread is sleep at" + i);
try
{
Thread.Sleep(20);//有点像Timer控件,掐时间跑程序而已,哪里体现两个线程的优点?
}
catch (ThreadInterruptedException e)
{
Console.WriteLine("Thread is interrupted"+"异常了!"+e.Message);
}
}
}
}
public void AwakeThread()
{
for(int i=10;i<20;i++)
{ Console.Write(i+",");
if(sleeper.ThreadState==System.Threading.ThreadState.WaitSleepJoin)
{
Console.WriteLine("Thread is awake at滚犊子"+i);
sleeper.Interrupt();
}
}
}
static void Main(string[] args)
{
MyInterrupt mi = new MyInterrupt();
sleeper = new Thread(new ThreadStart(mi.SleepThread));
awaker = new Thread(new ThreadStart(mi.AwakeThread));
sleeper.Start();//首先运行sleeper线程
awaker.Start();//第二个运行的awaker线程
Console.Read();
}
}
}
运行程序结果截图:
问题:
1,运行的结果,有时候不一样,是不是就是代码并行运行的结果,导致输出的结果可控性差?
2线程究竟是什么,感觉就是个函数而已,没什么特别,没有用,就像windowform窗体,没有关闭窗体而已?其实具体线程是什么,有什么用处?线程出现的历史原因?其实不用线程,用函数函数代替就行,还弄个线程干什么?
对于单核来说,同一时刻,肯定是只能执行一段代码的。
多线程的作用在于让多段代码随机执行,就不用等待耗时长的代码执行完毕。可以优先执行后面的过程。
专家,我感觉,不用线程也可以,调用两个方法就算了,没多线程的威力体现在哪里?我的线程一个sleeper、一个是awaker;这里用两个线程,感觉用两个方法函数而已
@黑夜猫头鹰: 如果有一个方法很耗时,需要执行半小时怎么办?第二个方法是响应给客户的,难道客户需要等待半小时才能收到响应吗?
@幻天芒: 如果是winform的话,究竟有没有线程的?其实一个winform窗体,本质也是一个线程吗?因为假设我们有个项目,我们可以同时打开多窗体,如一个是学生表窗体,一个课程表窗体,他们之间可以同时进行的,请问其实这个两个窗体间的本质也是用了线程的技术,使得同个项目的两个窗体可以同时并行运行?
@黑夜猫头鹰: 对于一个WinForm程序来说,整个算一个线程,UI线程,控制所有的窗体,因为你不可能操作两个窗体,所以这里没有多线程哇。
@幻天芒: 接着我刚才的例子,我不是说,我的项目有两个窗体(一个学生表窗体,一个课程表winform窗体),我同时在两个窗体输入信息,两个窗体输入信息后,就上传信息到数据库,那么假设我的数据上传到数据库要半小时,那么我在那个窗体信息都输入完毕后,同时给在两个窗体点击“提交”按钮,这样不是起到同步上传的功能?相当于两个线程呢?
我的理解不对?
@黑夜猫头鹰: 虽然是两个窗体,你无法同时点提交。然后在数据上传到数据库的这半个小时,窗体是卡死的。这就是单线程的问题。如果是多线程的话,当你对窗体操作时,命令会进入执行队列,cpu可能一下子就把你的窗体操作执行了,然后接着上传数据库,这个时候,给用户的感觉,就是窗体是随时可操作的。
@幻天芒: 你是说,点击第一个“提交”按钮,第二个窗体的“提交”按钮是不能点击是吗?要等到第一个窗体的数据上传完毕后,第二窗体的“提交”按钮才可以是吧?
@黑夜猫头鹰: 单线程下,就是这样的~
@幻天芒: 多谢大牛
@黑夜猫头鹰: 我只是入门级的哈,你可以多实践下,体会更深。
@幻天芒: 带牛,其实我点不解即使,我不只是创建了两个线程怎么看管理器哪里是19个线程,求老师科普
@黑夜猫头鹰: 这个没注意过,解释不来~
@幻天芒: 老师,就喜欢开玩笑,能不能别这样……
@黑夜猫头鹰: 真心不会的。我搜索了下,说的是程序自己内部的。你可以测试下,自己新建多个线程,这边会不会多。
你看的这是别人的DEMO,就是在那儿演示怎么写Thread的代码。当然你不明白为什么要有线程了。
这么说吧,不用线程的话,你的UI就会卡死。比如你点下一个按钮,假设要做30分钟,不用线程的话,你那个软件就直接废了,
谁点都不响应。
如果是winform的话,也没有多线程?其实一个线程好比是一个winform窗体而已,可在winform窗体根本没有使用线程;照你的例子,假设做UI的话,我用一个窗体做UI,其实要处理的是用另外一个窗体即刻,不用线程技术?请老师,指点
连青人``多县城的重点在于异步。你先弄明白什么是异步再说吧
异步,同步的反义词