進程、線程、多線程的初步學習

//進程是當一個程序開始運行時,她就是一個進程
//線程是一個程序運行中的一個執行流 例如播放器 運行的時候可以看歌詞,就是一個線程
//多線程 迅雷中的下載就是一個例子 下載一個是單線程 同時下載多個就是多線程 提高cpu的裏利用率
//多線程同時也有不利的 線程也是程序 需要佔用內存,多線程需要協調和管理,所以需要cpu時間跟蹤線程
// 線程之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題;線程太多會導致控制太複雜,最終可能造成很多Bug;
// 用 Thread 類創建線程時, 只需提供線程入口(線程入口使程序知道該讓這個線程幹什麼事)
//創建線程的語法:
// 2:Thread newThread = new Thread(方法);
// 注意:方法可以是靜態的也可以爲非靜態
//方法可以是本類的也可以爲非本類
//思考:如果線程的入口方法帶參數怎麼辦?
//那麼參數一定是Object類型
//線程的參數請由對象或類進行承載
static void Main(string[] args)
{
//沒有參數類型的
Thread t = new Thread(RunDownload);
t.Start();
//有參數類型的
Thread t1 = new Thread(Run);
List list= new List { 1, 2, 3, 4, 5 };
t1.Start(list);
}
static void RunDownload()
{
Console.WriteLine(“開始下載”);
}
static void Run(object obj)
{

 List<int> s = obj as List<int>;
        foreach (var item in s)
        {
            Console.WriteLine(item);
        }

    }

//多線程的使用
static void Main(string[] args)
{
Thread t1 = new Thread(RunDownload);
Thread t2 = new Thread(ReadFile);
t1.Start();
t2.Start();
//獲取當前運行狀態
Console.WriteLine(t1.ThreadState);
}
Console.WriteLine(t2.ThreadState);
}
static void RunDownload()
{
int i = 0;
while (true)
{
Thread.Sleep(50);
//Console.WriteLine(“下載”);
Console.Write(i+++”\t”);
}
}
static void ReadFile()
{
while (true)
{
Thread.Sleep(500);
Console.WriteLine();
}
}
//當多個線程同時運行一個方法時我們需要用一個 lock (this)//互斥鎖 或者Monitor來解決死鎖現象
static void Main(string[] args)
{
Student s = new Student();
Thread t1 = new Thread(s.Run);
Thread t2 = new Thread(s.Run);
Thread t3 = new Thread(s.Run);
t1.Name = “汽車1”;
t2.Name = “汽車2”;
t3.Name = “汽車3”;
t1.Start();
t2.Start();
t3.Start();
}
class Student
{
public void Run()
{
//解決死鎖方式1
lock (this)//互斥鎖 ,解決線程同步問題,多個線程操作同一個方法的時候會出現死鎖
{
Console.WriteLine(Thread.CurrentThread.Name+”過隧道”);
Thread.Sleep(2000);
}
//
//解決死鎖方式2
//Monitor.Enter(this);
//Console.WriteLine(Thread.CurrentThread.Name+”過隧道”);
//Thread.Sleep(2000);
//Monitor.Exit(this);
}
}
}
//如果是靜態方法則需要

static Object obj = new object();
static void Student()
{
lock (obj)
{
Console.WriteLine(Thread.CurrentThread.Name+”過隧道”);
Thread.Sleep(2000);
}
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章