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 ...
随机推荐
- python selenium启动浏览器打开百度搜索
python selenium打开百度搜索 #!usr/bin/python from selenium import webdriver import time browser = webdrive ...
- StartUML破解
破解文件路径如今下: .../StarUML/www/license/node/LicenseManagerDomain.js 使用文本编辑器打开,红色字体为添加内容: function valida ...
- GridControl 选择列、复选框全选(上)
说明: GirdControl 中添加一列,这一列不是写在数据库中的,而是代码中添加的. 图示: 底层类代码: #region GridControl 全选 /// <summary> / ...
- JAVA的反射机制原理
http://www.cnblogs.com/hongxinlaoking/p/4684652.html 一 反射机制的概念: 指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于 ...
- jfinal-QuartzPlugin后台任务调度
配置方法: 1. 在jfinal的Start.java中插件位置配置QuartzPlugin /** * 配置插件 */ public void configPlugin(Plugins me) { ...
- iOS开发多线程篇---atomic nonatomic区别
摘要 atomic和nonatomic区别用来决定编译器生成的getter和setter是否为原子操 作.atomic提供多线程安全,是描述该变量是否支持多线程的同步访问,如果选择了atomic 那么 ...
- Java中Map的使用
Map以按键/数值对的形式存储数据,和数组很类似,在数组中存在的索引,它们本身也是对象. Map的接口 Map---实现Map Map.Entry--Map的内部类 ...
- 选择 GCD 还是 NSTimer ?
我们常常会延迟某件任务的执行,或者让某件任务周期性的执行.然后也会在某些时候需要取消掉之前延迟执行的任务. 延迟操作的方案一般有三种: 1.NSObject的方法: 2.使用NSTimer的方法: 3 ...
- [Form Builer]Locking Mode and LOCK_RECORD
Locking Mode Property Description Specifies when Oracle Forms tries to obtain database locks on rows ...
- Linux基础命令(三)
一.常用命令—文件目录类命令 1.ls 列出指定或默认目录的文件信息 使用形式: ls [选项] [目录名] 实例: $ls $ls –als $ls /home/sq/Desktop $ls ./D ...