30, C#에서 여러 스레드 사용 방법
Thread는 기본적으로 프론트 데스크톱 라인을 시작합니다.다른 오픈 방식은 기본적으로 백엔드 라인을 시작합니다.
System.Threading
Thread newThread = new Thread(AMethod);
// AMethod, 。
Start
newThread.Start();
newThread.Abort();
Thread
라인의 다양한 상용 방법 목록메서드
조작하다
Start
스레드 실행 시작
Sleep
라인을 지정한 시간을 멈추게 합니다.
Suspend
라인이 안전점에 도착했을 때, 그것을 멈추게 해라.
Abort
라인이 안전점에 도착했을 때, 그것을 멈추게 해라.
Resume
마운트된 스레드 재부팅
Join
현재 라인을 다른 라인이 완성될 때까지 기다립니다.이 메서드는 시간 초과 값과 함께 사용할 때 지정된 시간 내에 스레드가 완료되면 True로 돌아갑니다.
**안전점: **안전점은 코드에서 공용어가 실행될 때 자동으로'쓰레기 수거'를 안전하게 실행할 수 있는 위치를 가리킨다.쓰레기 수거는 더 이상 사용하지 않는 변수를 방출하고 메모리를 회수하는 과정을 말한다.스레드에 대한 Abort 또는 Suspend 메서드를 호출하면 공용 언어가 실행될 때 코드를 분석하여 스레드가 중단될 적절한 위치를 결정합니다.
Thread
의 관련 속성:등록 정보
값
IsAlive
스레드가 활성 상태이면 값 True가 포함됩니다.
IsBackground
블라인드 값을 가져오거나 설정합니다. 이 값은 라인이 맞는지, 백엔드 라인이 맞는지 여부를 나타냅니다.백엔드 라인은 백엔드 라인과 유사하지만, 백엔드 라인은 프로세스가 멈추는 것을 막지 않습니다.프로세스의 모든 프론트 데스크톱 스레드가 정지되면 공용 언어가 실행될 때 활성 상태인 백엔드 스레드에 Abort 방법을 호출하여 프로세스를 끝냅니다.
Name
라인의 이름을 가져오거나 설정합니다.보통 디버깅을 할 때 각 라인을 발견하는 데 사용됩니다.
Priority
라인 스케줄링의 우선순위를 정하는 데 사용할 운영체제의 값을 가져오거나 설정합니다.
ApartmentState
특정 라인에 사용할 라인 모형을 가져오거나 설정합니다.스레드 모델은 스레드가 비 트랜잭션 코드를 호출할 때 매우 중요하다.
ThreadState
스레드 상태를 설명하는 값을 포함합니다.
스레드 우선 순위 각 스레드에는 실행에 사용되는 프로세서 타임 슬라이스 크기를 결정하는 우선 순위 속성이 있습니다.운영 체제는 높은 우선순위 라인에 비교적 긴 시간대를 분배하고 낮은 우선순위 라인에 비교적 짧은 시간대를 분배한다.새로 만든 스레드는 값
Normal
이 있지만 Priority 속성을 ThreadPriority
로 변경할 수 있습니다.2. 의뢰를 통해 스레드 오픈
의뢰를 통해
BeginInvoke
방법을 호출하여 하나의 라인을 열고 이 의뢰가 가리키는 방법을 집행한다.
//
static string test1(int x, int y)
{
Console.WriteLine(x + y);
return x + "+"+ y;
}
static void Main(string[] args)
{
Func fun1 = test1;
// 。 , , , , 。
fun1.BeginInvoke(10, 20, test1CallBack, fun1);
}
// ,
static void test1CallBack(IAsyncResult ar)
{
//AsyncState , fun1.BeginInvoke(10, 20, test1CallBack, fun1); , fun1
Func fun1 = ar.AsyncState as Func;
// 。
string result = fun1.EndInvoke(ar);
Console.WriteLine(" " + result);
}
3. 스레드 풀
static void ThreadFunc3()
{
Console.WriteLine("--------");
// 。 , 。
ThreadPool.QueueUserWorkItem(test3);
ThreadPool.QueueUserWorkItem(test3);
ThreadPool.QueueUserWorkItem(test3);
ThreadPool.QueueUserWorkItem(test3);
ThreadPool.QueueUserWorkItem(test3);
ThreadPool.QueueUserWorkItem(test3);
ThreadPool.QueueUserWorkItem(test3);
ThreadPool.QueueUserWorkItem(test3);
Console.WriteLine("========");
Thread.Sleep(100);
}
// , object ,
static void test3(object obj)
{
Thread.CurrentThread.IsBackground = false;
Console.WriteLine("asdas");
}
4. Task 오픈
static void ThreadMethod()
{
Console.WriteLine("ThreadMethod Begin" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
Console.WriteLine("Thread End");
}
static void continueTask(Task t)
{
Console.WriteLine("task is continue" + t.Id);
Thread.Sleep(3000);
Console.WriteLine("task is complete");
}
static void Main(string[] args)
{
//
//Task t = new Task(ThreadMethod);
//t.Start();
////
//TaskFactory tf = new TaskFactory();
//tf.StartNew(ThreadMethod);
Task t1 = new Task(ThreadMethod);
Task t2 = t1.ContinueWith(continueTask);
t1.Start(); // t1, t1 , t2
Console.ReadKey();
}
5. 스레드 사용 문제
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace TestProject
{
class SaleTicket
{
private Thread thread1;
private Thread thread2;
private Thread thread3;
private int ticketCount = 1000;
public SaleTicket()
{
thread1 = new Thread(Sale);
thread2 = new Thread(Sale);
thread3 = new Thread(Sale);
}
public void Sale()
{
while(true)
{
lock(this)
{
if (ticketCount > 0)
{
ticketCount -= 1;
Console.WriteLine(Thread.CurrentThread.Name + " , " + ticketCount);
}
else
{
Console.WriteLine(Thread.CurrentThread.Name + ": ");
break;
}
}
}
}
public void StartSaleTicket()
{
thread1.Start();
thread2.Start();
thread3.Start();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.