C# Thread多线程学习
自我学习理解:一个程序中包括多个进程,每个进程包括多个线程,多个线程可同时做不同的事情(说是同时,但它是交换执行的,人感觉像是同时罢了)。
优点:提高CPU的使用率。
线程同步:同步就是指一个线程要等待上一个线程执行完之后才开始执行当前的
线程异步:线程异步是指一个线程去执行,它的下一个线程不必等待它执行完就开始执行
缺点:耗内存.
线程多时难以管理,易出现Bug。
命名空间:using System.Threading;
多线程的几种状态:
Thread类有几个至关重要的方法,描述如下:
Start():启动线程;
Sleep(int):静态方法,暂停当前线程指定的毫秒数;
Abort():通常使用该方法来终止一个线程;
Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;
Resume():恢复被Suspend()方法挂起的线程的执行;
thread.Join():等线程执行完后结束线程。
Thread的5种优先级:Highest(最高),AboveNormal(高于正常),Normal(正常),BelowNormal(低于正常),Lowest(最低)
优先级的意思并不是说哪个线程先执行,而是CPU给由优先级高的分配的时间片会多一些。高的比低的执行的次数会多一些,但是顺序不确定。
多线程的简单使用
static void Main(string[] args)
{
Program a = new Program();
a.CreateThread();
} Thread thread1 = null;
Thread thread2 = null;
event EventHandler CloseEvent;//定义线程执行完后的事件
List<int> lis = new List<int>();
private void CreateThread()
{
thread1 = new Thread(new ThreadStart(function1));
thread1.Priority = ThreadPriority.Highest;//设置最高优先级
thread2 = new Thread(new ThreadStart(function1));
thread2.Priority = ThreadPriority.Lowest;//设置最低优先级 thread1.Name = "php1";//线程名称
thread2.Name = "php2";
CloseEvent += new EventHandler(threadClose);//线程结束时调用
thread1.Start();//启动线程开始执行
thread2.Start();
} void function1()
{
while (true)
{
//Monitor.Enter(this);//锁定,保持同步
if (lis.Count == 100)
{
CloseEvent(this, new EventArgs());
}
else
{
int a = new Random().Next(10);
lis.Add(a); Console.WriteLine(Thread.CurrentThread.Name+"线程添加了" + a); }
//Monitor.Exit(this);//取消锁定
//Thread.Sleep(1000);//暂停多少毫秒后执行
//thread1.Suspend();//挂起线程
//thread1.Resume();//恢复挂起的线程
}
}
void function2()
{
while (true)
{
//Monitor.Enter(this);//锁定,保存同步
if (lis.Count == 100)
{
CloseEvent(this, new EventArgs());
}
else
{
int b = new Random().Next();
lis.Add(b);
Console.WriteLine("线程2添加了" + b);
}
//Monitor.Exit(this);//取消锁定
//Thread.Sleep(1000);//暂停多少毫秒后执行 }
} void threadClose(object sender, EventArgs e)
{ Console.WriteLine("线程运行结束!");
Console.ReadLine();
thread1.Abort();
thread2.Abort();
}
C# Thread多线程学习的更多相关文章
- 多线程学习-基础(一)Thread和Runnable实现多线程
很久没记录一些技术学习过程了,这周周五的时候偶尔打开“博客园”,忽然让我产生一种重拾记录学习过程的想法,记录下学习研究过程的一点一滴,我相信,慢慢地就进步了!最近想学习一下多线程高并发,但是多线程在实 ...
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
- 【转】C#多线程学习
C#多线程学习(一) 多线程的相关概念 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序 ...
- java多线程学习
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 一.扩展java.lang.Thread类 package com.multithread.lea ...
- Java多线程学习(吐血超详细总结)
本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的 ...
- C#多线程学习(一) 多线程的相关概念(转)
什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄 ...
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
- C#多线程学习之(五)使用定时器进行多线程的自动管理
本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理.分享给大家供大家参考.具体分析如下: Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执 ...
- [转] Qt 多线程学习
Qt 多线程学习 转自:http://www.cnblogs.com/IT-BOY/p/3544220.html 最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本<C++ G ...
随机推荐
- 如何用jQuery实现在鼠标滚动后导航栏保持固定
要实现如下效果,鼠标滚动后,上方导航栏置顶固定 关键html代码: <div class="header-bottom"> <div class="co ...
- Java多重if....else if
public class HelloWorld { public static void main(String[] args) { int age=25; if(age>60){ System ...
- Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍
本文主要内容: 1.FTP服务端部署---- 基于Android中SwiFTP开源软件介绍: 2.FTP客户端部署 --- 基于ftp4j开源jar包的客户端开发 : 3.使用步骤 --- 如何测试我 ...
- 读<大数据日知录:架构与算法>有感
前一段时间, 一个老师建议我能够学学 '大数据' 和 '机器学习', 他说这必定是今后的热点, 学会了, 你就是香饽饽.在此之前, 我对大数据, 机器学习并没有非常深的认识, 总觉得它们是那么的缥缈, ...
- linux用户与组的管理(命令加入、手动加入、加入组、用户之间的切换)
一.用户登录的时候须要验证的是这两个文件 检測username Login: root 到该文件夹下检查 /etc/passwd 检測用passwo ...
- android114 c转换成c++
##C向C++改造 . 把c文件后缀名换成cpp . Android.mk文件中的hello.c也要换成hello.cpp . c++的使用的环境变量结构体中,访问了c使用的结构体的函数指针,函数名全 ...
- 给未来的你——李开复2011级大学新生演讲
2011年09月26日08:30 来源:<中国青年报> <中国青年报>的读者朋友们: 你们肩负着中华的未来,你们身上正涌动着创新的血脉! 无论你在哪所学校,哪个城市,你都是与众 ...
- 使用TabLayout快速实现一个导航栏
在没有Material Design的年代,要实现一个类似微信主页面的效果,我们有以下几种解决方案: 1.Fragment + ViewPager + RadioGroup自定义固定导航条 2.F ...
- 练习PopupWindow弹出框之实现界面加载的时候显示弹出框到指定的view下面--两种延迟方法
今天在练习PopupWindow弹出框的时候,打算在界面加载的时候将弹出框展现出来并显示在指定的view下面. 初步方法是直接在OnResume方法里面直接执行showPopupWindows方法. ...
- 使用modelsim仿真DDR3时编译出错的解决方法
Modelsim 10.1c release note sates as : Product Changes in 10.1c Release 10.1b introduced a new error ...