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 ...
随机推荐
- 数值类对象:NSNumber,NSValue,NSNull
基本,集合,复杂,对象 可用对象封装基本数值,然后将对象放入NSArray或NSDictionary 中. 用对象封装基本数值后,即可给其发送消息. 数值类型包括:NSNumber,NSValue,N ...
- 8-13-Exercise
链接:夜间活动 昨天的比赛好郁闷.......倒不是因为题目......在快要比赛的时候突然所有的网站都进不去了.......改了半天的DNS & IP......比赛都比了1个多小时才进去. ...
- Android源码分析-消息队列和Looper
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17361775 前言 上周对Android中的事件派发机制进行了分析,这次博主 ...
- Add-VMNetworkAdapterAcl(添加访问控制列表)
Add-VMNetworkAdapterAclCreates an ACL to apply to the traffic through a virtual machine network adap ...
- Hyper-V虚机跨NUMA节点性能影响
查看单个NUMA节点的内存大小: Hyper-V VM VID NUMA节点\PageCount:83769708376970*4k/1024/1024=32GB Hyper-V VM VID NUM ...
- careercup-递归和动态规划 9.8
9.8 给定数量不限的硬币,币值为25分.10分.5分和1分,编写代码就是n分有几种表示法. 解法: 使用回溯法进行解决,实际上就是一个类似枚举的过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满 ...
- Improving Lock Performance in Java--reference
After we introduced locked thread detection to Plumbr couple of months ago, we have started to recei ...
- Winform之跨线程访问控件(在进度条上显示字体)
此文章对于遇到必须使用线程但是没有办法在线程内操作控件的问题的处理 有很好的解决方案(个人认为的.有更好的方案欢迎交流.) 在做跨线程访问之前我们先了解下我们所做的需要达到的效果: 这个是批量的将x ...
- 一款很不错的FLASH时种插件
直接贴一段代码上来,大家看看效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- JSTL-core核心代码标签库中的if,set,out等的功能
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...