自我学习理解:一个程序中包括多个进程,每个进程包括多个线程,多个线程可同时做不同的事情(说是同时,但它是交换执行的,人感觉像是同时罢了)。

优点:提高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多线程学习的更多相关文章

  1. 多线程学习-基础(一)Thread和Runnable实现多线程

    很久没记录一些技术学习过程了,这周周五的时候偶尔打开“博客园”,忽然让我产生一种重拾记录学习过程的想法,记录下学习研究过程的一点一滴,我相信,慢慢地就进步了!最近想学习一下多线程高并发,但是多线程在实 ...

  2. Java多线程学习笔记

    进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...

  3. 【转】C#多线程学习

    C#多线程学习(一) 多线程的相关概念 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序 ...

  4. java多线程学习

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 一.扩展java.lang.Thread类 package com.multithread.lea ...

  5. Java多线程学习(吐血超详细总结)

    本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的 ...

  6. C#多线程学习(一) 多线程的相关概念(转)

    什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄 ...

  7. Java多线程学习(转载)

    Java多线程学习(转载) 时间:2015-03-14 13:53:14      阅读:137413      评论:4      收藏:3      [点我收藏+] 转载 :http://blog ...

  8. C#多线程学习之(五)使用定时器进行多线程的自动管理

    本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理.分享给大家供大家参考.具体分析如下: Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执 ...

  9. [转] Qt 多线程学习

    Qt 多线程学习 转自:http://www.cnblogs.com/IT-BOY/p/3544220.html 最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本<C++ G ...

随机推荐

  1. delphi 控制 EXCEL 数据透视表

    虽说报表多又难做,做报表相当容易. 做报表也可以偷懒的,超级实用又省事.只需要做一个报表,这个报表里面包括几乎所有的数据字段,然后将查询到的数据导出到 excel中,利用excel自带的“数据透视”功 ...

  2. 学习Visitor Pattern 有感而发!override and overload

    通过阅读各位前辈写的博文,像吕震宇,idior,李建忠WebCast等,对Visitor模式有一定的了解,有感而记录下来,以备忘. Visitor Pattern 假设了这样一个场景,在一个类型层次中 ...

  3. Dublin Core

    DC(Dublin Core) 是数字图书馆中使用的一组简单的包括15个“核心元素”的元数据元素集合,主要用于描述数字对象.馆藏管理和元数据交换. 这15项元数据不仅适用于电子文献目录,也适用于各类电 ...

  4. C# 基础知识 protected 关键字

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  5. easyui valid

    /** * 包含easyui的扩展和常用的方法 * * @author * * @version 20120806 */ var wjc = $.extend({}, wjc);/* 定义全局对象,类 ...

  6. Recommended add-ons/plugins for Microsoft Visual Studio

    http://stackoverflow.com/questions/2767/recommended-add-ons-plugins-for-microsoft-visual-studio NUGe ...

  7. SQL Server将一列的多行内容拼接成一行的问题讨论

    转自http://blog.csdn.net/rolamao/article/details/7745972 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出 ...

  8. 从本地上传整个目录到hdfs的java程序

    首先在网上找了好久没有找到从本地文件系统上传整个目录到hdfs文件系统的程序,权威指南上也没有,都是单个文件上传,所以这里自己编写了一个程序,封装成jar包执行能够复制. 先说明一下代码:须要手动输入 ...

  9. 可拖拽重排的CollectionView

    来源:wazrx 链接:http://www.jianshu.com/p/8f0153ce17f9 写在前面 这段时间都在忙新项目的事儿,没有时间倒腾,这两天闲下来,想着一直没有细细的研究Collec ...

  10. Android(java)学习笔记211:采用httpclient提交数据(qq登录案例)

    1.Apache -Httpclient HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包 ...