C# 线程和线程安全-如何管理线程内外的数据
我正在努力自学c#的线程技术,我已经阅读了大量的教程、问题和示例。我已经成功地(*这似乎可行)实现了线程到更大的应用程序中,但对我来说,这是一些非常灰色的领域 我试着把一个小的控制台应用程序放在一起,作为讨论的重点,并尝试回答提出的问题。我不是一个有经验的程序员,所以如果我在这里犯了一些致命的错误,我真诚地道歉。请随意指出它们,以提高我的编程技能。希望我在这里提出的问题能帮助我和其他试图理解线程的人C# 线程和线程安全-如何管理线程内外的数据,c#,multithreading,C#,Multithreading,我正在努力自学c#的线程技术,我已经阅读了大量的教程、问题和示例。我已经成功地(*这似乎可行)实现了线程到更大的应用程序中,但对我来说,这是一些非常灰色的领域 我试着把一个小的控制台应用程序放在一起,作为讨论的重点,并尝试回答提出的问题。我不是一个有经验的程序员,所以如果我在这里犯了一些致命的错误,我真诚地道歉。请随意指出它们,以提高我的编程技能。希望我在这里提出的问题能帮助我和其他试图理解线程的人 第一个问题是——如果我打电话 ThreadStart()中的randomNums.Genrate
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
//采用系统线程技术;
使用系统线程;
名称空间线程示例
{
班级计划
{
静态void Main(字符串[]参数)
{
MyApplication app=新的MyApplication();
app.Start();
}
公共类MyApplication
{
私有随机数;
公共应用程序()
{
}
公开作废开始()
{
randomNums=新的随机数();
randomNums.GenrateRandomNumbers();
randomNums.PrintRandomcNumbers();
ThreadManager newThreadMan=newthreadmanager(随机数);
Console.ReadLine();
}
}
公共类线程管理器
{
私有随机数;
私有线程[]新线程;
私有整数线程计数;
公共线程管理器(随机数newRandomNums)
{
线程数=3;
随机数=新随机数;
newThreads=新线程[threadCount];
对于(int i=0;i
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// Using System Threading for theads;
using System.Threading;
namespace ThreadingExamples
{
class Program
{
static void Main(string[] args)
{
MyApplication app = new MyApplication();
app.Start();
}
public class MyApplication
{
private RandomNumbers randomNums;
public MyApplication()
{
}
public void Start()
{
randomNums = new RandomNumbers();
randomNums.GenrateRandomNumbers();
randomNums.PrintRandomcNumbers();
ThreadManager newThreadMan = new ThreadManager(randomNums);
Console.ReadLine();
}
}
public class ThreadManager
{
private RandomNumbers randomNums;
private Thread[] newThreads;
private int threadCount;
public ThreadManager(RandomNumbers newRandomNums)
{
threadCount = 3;
randomNums = newRandomNums;
newThreads = new Thread[threadCount];
for (int i = 0; i < threadCount; i++)
{
newThreads[i] = new Thread(ThreadStart);
newThreads[i].Start();
}
}
public void ThreadStart()
{
randomNums.PrintRandomcNumbers();
}
}
public class RandomNumbers
{
private Random rnd = new Random();
private int numberToStore;
private int[] randomNumbers;
public RandomNumbers()
{
numberToStore = 12;
randomNumbers = new int[numberToStore];
}
public void GenrateRandomNumbers()
{
for (int i = 0; i < numberToStore; i++)
{
randomNumbers[i] = rnd.Next(1,13);
}
}
public void PrintRandomcNumbers()
{
StringBuilder outputString = new StringBuilder();
for (int i = 0; i < numberToStore; i++)
{
outputString = new StringBuilder("The Random Numbers in position ");
outputString.Append(i.ToString());
outputString.Append("is the number: ");
outputString.Append(randomNumbers[i].ToString());
Console.WriteLine(outputString);
}
}
}
}
}
public void GenrateRandomNumbers()
{
randomNumbers=new List<int>();
for (int i = 0; i < numberToStore; i++)
{
randomNumbers[i] = rnd.Next(1,13);
}
}