初级多线程学习
其中
- one()方法就不需要看了,也可用看一下
- two(); // 进阶 Task线程学习 1.NetFrameWork多版本线程对比,2多线程应用的几大场景
- (Task,TaskFactory,Parallel,ThreadPool,Thread) Three();
///多线程安全/和一些数据错误解决方案///
代码不分注释否,都是有用的
有学习视频可看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace domCMD
{
/// <summary>
/// 多线程
/// </summary>
public class Program
{
/// <summary>
///
/// </summary>
/// Thread是一个类,最终是以Thread去完成操作
/// 多线程,资源换性能 一个线程10秒 5个线程3秒,不是他的5倍,因为他是有协调时间存在的
///
/// 多线程:无序性, 但是可以设置线程的优先级
///
/// CurrentThread:当前线程
/// ManagedThreadId 是.net给Thread起的名字,是int,代号
/// <param name="args"></param>
static void Main(string[] args)
{
///多线程使用/////////////////////
//one(); //初级线程学习 1.异步的回调状态和参数,2 异步的三种方式,3获取异步返回值
//two(); // 进阶 Task线程学习 1.NetFrameWork多版本线程对比,2多线程应用的几大场景 (Task,TaskFactory,Parallel,ThreadPool,Thread)
///多线程安全////////////////////
//Three();
Console.WriteLine("END");
Console.ReadLine();
}
public static void Three()
{
/////小坑1--------------------------------------循环开启线程,获取i值 不对------------------------------------------------------
//for (int i = 0; i < 5; i++)
//{
// int K = i;
// Task.Run(() =>
// {
// Console.WriteLine($"当前循环i ={i} K={K} " );
// //当前循环i = 5 k = 0
// //当前循环i = 5 k = 1 ( 为什么会这样,因为Task是多线程, 从而for不堵塞迅速执行完毕
// //当前循环i = 5 k = 3 ,这时多线程得到了系统CPU的调度,开始执行,然后去找i 而这时i=5
// //当前循环i = 5 k = 4 为什么 K 是对的呢? 因为每次循环都是重新生成一个K 所以K是5个分别对应不同的i值; )
// //当前循环i = 5 k = 2
// });
//}
// 小坑2 ---------------------------------------循环往List 添加值时数据丢失--------------------------------------------------------
//List<int> vs = new List<int>();
//for (int i = 0; i < 1000; i++)
//{
// //vs.Add(i); //List的Count1000 单线程毋庸置疑他是1000
// int k = i;
// Task.Run(() => {
vs.