You are on page 1of 12

1.

Thread class
Trong C#, một hệ thống đa luồng được xây dựng dựa trên lớp Thread, lớp này
sẽ thực thi các luồng. Lớp chứa một số phương thức và thuộc tính giúp quản lý
và tạo các luồng và lớp này được định nghĩa trong System.Threading namespace.

Đặc điểm của Thread class:


 Thread class được sử dụng để tạo ra thread.
 Với sự trợ giúp của Thread class, bạn có thể tạo foreground and
background thread
 Thread class cho phép bạn đặt mức độ ưu tiên  của luồng.
 Nó cũng cung cấp cho bạn trạng thái hiện tại của một luồng.
 Nó cung cấp tham chiếu của luồng thực thi hiện tại.
 Nó là một lớp niêm phong.

2. Properties and methods


2.1 Properties
- CurrentThread: để kiểm tra chuỗi đang chạy hiện tại. Hay nói
cách khác, giá trị của thuộc tính này cho biết luồng đang chạy hiện
tại.
 Cú pháp: public static Thread CurrentThread { get; }
 Giá trị trả về:  Thuộc tính này trả về một luồng đại diện cho luồng đang
chạy hiện tại.
 Ví dụ:
// C# program to illustrate the
// use of CurrentThread property
using System;
using System.Threading;

class GFG {

// Main Method
static public void Main()
{
Thread thr;

// Get the reference of main Thread


// Using CurrentThread property
thr = Thread.CurrentThread;
thr.Name = "Main thread";
Console.WriteLine("Name of current running "+
"thread: {0}", thr.Name);
}
}

- IsAlive để kiểm tra xem chuỗi còn chạy hay không. Hay nói cách
khác, giá trị của thuộc tính này cho biết quá trình thực thi hiện tại
của luồng.
+ Cú pháp:
Public Bool IsAlive { get; }
+ Giá trị trả về: Thuộc tính này trả về true nếu luồng được bắt đầu và
không bị chấm dứt bình thường hoặc bị hủy bỏ. Nếu không, trả
về false . Kiểu trả về của thuộc tính này là System.Boolean .
+ Ví dụ
// C# program to illustrate the
// use of IsAlive property
using System;
using System.Threading;

public class GFG {

// Main Method
static public void Main()
{
Thread thr;

// Get the reference of main Thread


// Using CurrentThread property
thr = Thread.CurrentThread;

// Display the current state of


// the main thread Using IsAlive
// property
Console.WriteLine("Is main thread is alive"+
" ? : {0}", thr.IsAlive);
}
}

 Output: Is main thread is alive ? : True


- IsBackground lấy hoặc thiết lập một giá trị chỉ rằng có hay không
một Thread là Background Thread
- IsThreadPoolThread: Lấy một giá trị chỉ rằng có hay không một
thread là của Managed Thread Pool
+ Cú pháp: public bool IsThreadPoolThread { get; }
+ Giá trị trả về: Thuộc tính sẽ trả về True nếu Thread đã cho thuộc vào
managed thread pool, và ngược lại sẽ trả False
+ Ví dụ:
// C# program to illustrate the use
// of IsThreadPoolThread property
using System;
using System.Threading;

class GFG {

// Main Method
static public void Main()
{
Thread T;

// Get the reference of main Thread


// Using CurrentThread property
T = Thread.CurrentThread;

// Check if the main thread belongs to


// the managed thread pool or not
// Using IsThreadPoolThread property
Console.WriteLine("Is main thread belongs to Thread"+
" pool? : {0} ",
T.IsThreadPoolThread);
}
}
 Output: Is main thread belongs to Thread pool? : False
- ManagedThreadId: Lấy một định danh duy nhất cho Managed
Thread hiện tại. Giá trị của ManagedThreadId không thay đổi theo thời
gian
+ Cú pháp: public int ManagedThreadId { get; }
+ Giá trị trả về: Thuộc tính này sẽ trả về giá trị cho biết mã định danh duy
nhất của chuỗi
+ Ví dụ:
// C# program to illustrate the
// use of ManagedThreadId property
using System;
using System.Threading;

public class GFG {

// Main Method
static public void Main()
{
Thread T;

// Get the reference of main Thread


// Using CurrentThread property
T = Thread.CurrentThread;

// Display the unique id of the main


// thread Using ManagedThreadId property
Console.WriteLine("The unique id of the main "+
"thread is: {0} ", T.ManagedThreadId);
}
}
 Output: The unique id of the main thread is: 1
- Name: Lấy hoặc thiết lập tên của Thread
+ cú pháp: public string Name { get; set; }
( ở đây, the string sẽ gồm tên của Thread hoặc Null nếu tên ko đk thiết
lập)
+ Những điểm lưu ý:
 Giá trị mặc định của thuộc tính Name là null.
 String được cung cấp cho thuộc tính tên có thể bao gồm
bất kỳ Ký tự Unicode nào.
 Thuộc tính Name của Thread class là ghi một lần.
 Nếu một thao tác đã đặt được yêu cầu, nhưng thuộc tính
Name đã được đặt, thì nó sẽ cung cấp
+ Ví dụ:
// C# program to illustrate the
// concept of assigning names
// to the thread and fetching
// name of the current working thread
using System;
using System.Threading;

class Geek {

// Method of Geek class


public void value()
{
// Fetching the name of
// the current thread
// Using Name property
Thread thr = Thread.CurrentThread;
Console.WriteLine("The name of the current "+
"thread is: " +
thr.Name);
}
}

// Driver class
public class GFG {

// Main Method
static public void Main()
{

// Creating object of Geek class


Geek obj = new Geek();

// Creating and initializing threads


Thread thr1 = new Thread(obj.value);
Thread thr2 = new Thread(obj.value);
Thread thr3 = new Thread(obj.value);
Thread thr4 = new Thread(obj.value);

// Assigning the names of the threads


// Using Name property
thr1.Name = "Geeks1";
thr2.Name = "Geeks2";
thr3.Name = "Geeks3";
thr4.Name = "Geeks4";

thr1.Start();
thr2.Start();
thr3.Start();
thr4.Start();
}
}
 Output:
The name of the current thread is: Geeks2
The name of the current thread is: Geeks3
The name of the current thread is: Geeks4
The name of the current thread is: Geeks1
- Priority: Lấy hoặc thiết lập một giá trị chỉ quyền ưu tiên của một Thread
+ Cú pháp: public ThreadPriority Priority{ get; set; }
+ Các mức độ ưu tiên:
 Cao nhất: Giá trị của ưu tiên này là 4.
 Trên mức bình thường: Giá trị của mức độ ưu tiên này là
3.
 Bình thường: Giá trị của ưu tiên này là 2.
 Dưới mức bình thường: Giá trị của mức độ ưu tiên này là
1.
 Thấp nhất: Giá trị của mức độ ưu tiên này là 0.
+ Ví dụ:
// C# program to illustrate how to
// set and get the priority of threads
using System;
using System.Threading;

class GFG {

// Main Method
static public void Main()
{

// Creating and initializing threads


Thread T1 = new Thread(work);
Thread T2 = new Thread(work);
Thread T3 = new Thread(work);
// Set the priority of threads
T2.Priority = ThreadPriority.Highest;
T3.Priority = ThreadPriority.BelowNormal;
T1.Start();
T2.Start();
T3.Start();

// Display the priority of threads


Console.WriteLine("The priority of T1 is: {0}",

T1.Priority);

Console.WriteLine("The priority of T2 is: {0}",

T2.Priority);

Console.WriteLine("The priority of T3 is: {0}",

T3.Priority);
}

public static void work()


{

// Sleep for 1 second


Thread.Sleep(1000);
}
}
 Output:

 Mức độ ưu tiên của T1 là: Bình thường


 Mức độ ưu tiên của T2 là: Cao nhất
 Mức độ ưu tiên của T3 là: Dưới mức bình thường

- ThreadState: lấy một giá trị chứa các trạng thái của Thread hiện tại
+ Cú pháp: public ThreadState ThreadState{ get; }
+ Ví dụ:
// C# program to illustrate the
// use of ThreadState property
using System;
using System.Threading;

public class GFG {

// Main Method
static public void Main()
{
Thread thr;

// Get the reference of main Thread


// Using CurrentThread property
thr = Thread.CurrentThread;

// Display the current state


// of the main thread
Console.WriteLine("The name of the current state of the
Main "
+ "thread
is: {0}", thr.ThreadState);
}
}
 Output: The name of the current state of the main thread is: Running
2.2Method
- Abort: Tạo một ThreadAbortException trong Thread mà trên đó nó được triệu hồi, để
bắt đầu tiến trình kết thúc Thread đó. Gọi phương thức này thường kết thúc Thread

+ cú pháp: public void Abort();


- Interrupt: Interrupt một Thread mà trong trạng thái WaitSleepJoin
+ Cú pháp: public void Interrupt();
- Join: Chặn Thread đang gọi tới khi một Thread kết thúc, trong khi tiếp tục thực hiện
COM và SendMessage Pumping.

- Sleep: Tạm dừng luồng hiện tại trong khoảng thời gian chỉ định
- Start: bắt đầu một Thread
3. Vòng đời của Thread

- Vòng đời của một Thread bắt đầu khi một đối tượng của lớp System.Threading.Thread
được tạo và kết thúc khi Thread đó được kết thúc hoặc hoàn thành việc thực thi.
- Dưới đây là các trạng thái đa dạng trong vòng đời của một Thread:

 Unstarted State: Nó là tình huống khi instance của Thread được tạo, nhưng
phương thức Start chưa được gọi.

 Ready State: Nó là tình huống khi Thread đó sẵn sàng để chạy và đợi CPU cycle.
 Not Runnable State: Một Thread là không thể thực thi (not executable), khi:

Phương thức Sleep đã được gọi.


Phương thức Wait đã được gọi.
 Bị ngăn chặn bởi hoạt động I/O.
 Dead State: Nó là tình huống khi Thread hoàn thành sự thực thi hoặc bị hủy bỏ.

Trong C#, để lấy trạng thái hiện tại của luồng, hãy sử dụng thuộc
tính ThreadState hoặc IsAlive do lớp Thread cung cấp.
+ Cú pháp: public ThreadState ThreadState{ get; }
Hoặc: public bool IsAlive { get; }
- Thread Class cung cấp các phương thức để thể hiện các trạng thái của
Thread:
 Phương thức Sleep() được sử dụng để tạm dừng thực thi hiện tại của
luồng trong một phần nghìn giây đã chỉ định, để các luồng khác có cơ hội bắt đầu
thực thi hoặc có thể nhận CPU để thực thi.
 Phương thức Join() được sử dụng để làm cho tất cả các luồng đang gọi
đợi cho đến khi luồng chính, tức là luồng đã tham gia hoàn thành công việc của nó.
 Phương thức Abort() được sử dụng để hủy bỏ luồng.
 Phương thức Suspend() được gọi để tạm dừng luồng.
 Phương thức Resume() được gọi để tiếp tục luồng bị treo.
 Phương thức Start() được sử dụng để gửi một luồng vào Runnable
State
 

4. ThreadState
- Một Thread luôn luôn trong một vài trạng thái hoặc một trạng thái khác từ
lúc bắt đầu đến khi kết thúc
- Thuộc tính ThreadState của Thread Class định nghĩa trạng thái của
Thread trong suốt quá trình thực thi và cung cấp thông tin về trạng thái
luồng
- Một số trạng thái của vòng đời một Thread:
+ Aborted: Thread bị hủy bỏ và hiện trạng thái Stopped
+ AbortedRequested: một yêu cầu hủy bỏ bị đưa ra thông qua pp
Thread.Abort nhưng Thread sẽ không đk nhận
System.Threading.ThreadAbortException
+ Background: Thread là background thread và sẽ thực thi ở nền. Trạng
thái này được điều chỉnh bởi thuộc tính Thread.IsBackground
+ Running: Thread hiện tại đang được thực thi và không có
ThreadAbortException đang chờ xử lý
+ Stopped: Thread bị hủy bỏ hoặc tạm dừng
+ StopRequested: Thread bị yêu cầu tạm dừng.
+ Unstarted: Thread được tạo và không được thực thi
+ WaitSleepJoin: Thread bị chặn bằng cách dùng Thread.Sleep hoặc
Thread.Join

You might also like