Thread类的常用方法:
String getName()返回该线程的名称。
void setName(String name)改变线程名称,使之与参数name相同。
int getPriority()返回线程的优先级。
void setPriority(int newPriority)更改线程的优先级。
boolean isDaemon()测试该线程是否为守护线程。
void setDaemon(boolean on)将该线程标记为守护线程或用户线程。
void interrupt()中断线程。
static void yield()暂停当前正在执行的线程对象,并执行其他线程。
void join()等待该线程终止。
void run()
void start()
从Object类继承来的方法void notify() void wait()。
最近整理的jdk1.8最新方法,详细具体用法下载个1.8手册看看就可以。
Thread()、Thread(Runnable target)、Thread(Runnable target, String name)、Thread(String name)、Thread(ThreadGroup group, Runnable target)、Thread(ThreadGroup group, Runnable target, String name)、Thread(ThreadGroup group, Runnable target, String name, long stackSize)、Thread(ThreadGroup group, String name)、static int activeCount()、void checkAccess()、static、Thread currentThread()、static void dumpStack()、static int enumerate(Thread[] tarray)、static Map<Thread,StackTraceElement[]> getAllStackTraces()、ClassLoader getContextClassLoader()、static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()、long getId()、String getName()、int getPriority()、StackTraceElement[] getStackTrace()、Thread.State、getState()、ThreadGroup getThreadGroup()、Thread.UncaughtExceptionHandlergetUncaughtExceptionHandler()、void interrupt()、static boolean interrupted()、boolean isAlive()、boolean isDaemon()、boolean isInterrupted()、void join()、void join(long millis)、void join(long millis, int nanos)、void run()、void setContextClassLoader(ClassLoader cl)、void setDaemon(boolean on)、static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)、void setName(String name)、void setPriority(int newPriority)、void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)、static void sleep(long millis)、static void sleep(long millis, int nanos)、void start()、String toString()、static void yield()。
最高 THREAD_PRIORITY_HIGHEST 线程在高于正常优先级上两级上运行。
高于正常 THREAD_PRIORITY_ABOVE_NORMAL 线程在正常优先级上一级上运行。
正常 THREAD_PRIORITY_NORMAL 线程在进程的优先级类上正常运行。
低于正常 THREAD_PRIORITY_BELOW_NORMAL 线程在低于正常优先级下一级上运行。
最低 THREAD_PRIORITY_LOWEST 线程在低于正常优先级下两级上运行。
空闲 THREAD_PRIORITY_IDLE 对于实时优先级类线程在优先级16上运行对于其他优先级类线程在优先级1上运行。
1.C#对线程进行操作时,通过Thread类,可以对线程进行创建、挂起、恢复、休眠、终止及设置优先级。
Thread类位于System.Threading命名空间下,该命名空间还包含一个ThreadPool类(允许用户使用系统提供的线程池)和一个Timer类(在线程池上执行回调方法)。
在线程运行期间,不同的时刻会表现为不同的状态,但它总是处于由ThreadState定义的一个或多个状态中。用户可以通过使用ThreadPriority枚举为线程定义优先级,但不能保证操系统会接收该优先级。
2.Thread类常用的属性:
CurrentThread 获取当前正在运行的线程。
IsAlive 获取一个值,该值只是当前线程的执行状态。
Name 获取或设置线程的名称。
Priority 获取或设置一个值,该值只是线程的调度优先级。
ThreadState 获取一个值,该值包含当前线程的状态。
3.Thread类常用的方法:
Abort 调用此方法通常会终止线程。
Join 阻止调用线程,直到某个线程终止时为止。
Resume 继续已挂起的线程。
Sleep 将当前线程阻止指定的毫秒数。
Start 使线程被安排进行执行。
Suspend 挂起线程,或者如果线程已挂起,则不起作用。
4.创建线程--Start()方法。
创建一个线程,只需将其声明并为其提供线程起始点处的方法委托。
Thread类具有接受一个ThreadState委托或ParameterizedThreadStart委托的构造函数,该委托包装了调用Start方法时由新线程调用的方法。
只有在调用Start方法后才会创建实际的线程。Start方法的两种重载方式:
(1)导致操作系统将当前实例的状态更改为ThreadState.Running。
语法:public void Start()。
说明:该方法无参数,无返回值
(2)使操作系统当前实例的状态更改为ThreadState.Running,并选择线程执行所需要的方法。
语法:public void Start(Object parameter)。
说明:参数parameter表示一个对象,包含线程执行的方法要使用的数据。
注意:如果线程已经终止,就无法通过再次调用Start方法来重新启动。
5.线程的挂起与恢复--Suspend方法和Resume方法。
(1)Suspend方法
该方法用来挂起线程,如果线程已经挂起则不起作用。
语法:public void Suspend()。
说明:调用Suspend方法挂起线程时,.net允许要挂起的线程再执行几个指令,目的是为了到达.net认为线程可以安全挂起的状态。
(2)Resume方法
该方法用来继续已挂起的线程
语法:public void Resume()。
说明:通过Resume方法来恢复被暂停的线程是,无论调用了多少次Suspend方法,调用Resume方法均会使另外的线程脱离挂起状态,并导致当前线程继续执行。
6.线程休眠--Sleep()方法。
该方法用来将当前线程阻止指定的时间,有两种重载方式。
(1)将当前线程挂起指定的时间。
语法:public static void Sleep(int millisecondsTimeout)。
说明:参数millisecondsTimeout表示线程被阻止的毫秒数,指定零以指示应挂起此线程以使其他等待线程能够执行;指定Infinite以无限期阻止线程。
(2)将当前线程阻止指定的时间。
语法:public static void Sleep(TimeSpan timeout)。
说明:参数timeout表示线程被阻止的时间量的TimeSpan,指定零以指示应挂起此线程以使其他等待线程能够执行;指定Infinite以无限期阻止线程。
7.终止线程
终止线程可以分别使用Abort方法和Join方法实现。
(1)Abort方法
用来终止线程,有两种重载形式,都是引发的ThreadAbortExecption。
public void Abort()--终止进程。
public void Abort(Object stateInfo)--终止线程并提供有关线程终止的异常信息。
参数stateInfo是一个对象,包含应用程序特定的信息(如状态),该信息可供正被终止的线程使用。
(2)Join方法
Join用来阻止调用线程,直到某个线程终止时为止。有三种重载形式。
public void Join()。
public bool Join(int millisecondsTimeout)。
说明:参数millisecondsTimeout表示等待线程终止的毫秒数。如果线程已终止,则返回值为true,如果线程经过了millisecondsTimeout指定时间后未终止,返回值为false。
public bollJoin(TimeSpan timeout)。
说明:参数timeout表示等待线程终止的时间量TimeSpan。如果线程已终止,则返回值为true,如果线程经过timeout时间量之后未终止,则返回值为false。
8.线程的优先级
AboveNormal 可以将Thread安排在具有highest优先级线程之后,在Normal之前。
BelowNormal 在Normal之后,Lowest之前。
Highest 在具有任何其他优先级的线程之前。
Lowest 在具有其他任何优先级的线程之后。
Normal 在AboveNormal之后,BelowNormal之前。默认值。
可以通过调用线程的Priority属性来获取和设置其优先级。Priority属性用来获取或设置一个值,该值指示线程的调度优先级。
语法:public ThreadPriority Priority{get;set;}。
说明:属性值是ThreadPriority枚举值之一,默认值为Normal。
实例代码:
[csharp] view plain copy。
static void Main(string[] args)。
Thread thread1 = new Thread(new ThreadStart(Thread1)); //使用自定义方法Thread1声明线程。
thread1.Priority = ThreadPriority.Lowest; //设置线程的调度优先级。
Thread thread2 = new Thread(new ThreadStart(Thread2)); //使用自定义方法Thread2声明线程。
thread1.Start(); //开启线程一。
thread2.Start(); //开启线程二。
Console.ReadLine();。
static void Thread1()。
Console.WriteLine("线程一");。
static void Thread2()。
Console.WriteLine("线程二");。
运行截图:
注意:这里很多人都疑惑了,既然thread1优先级比thread2优先级低,为什么还是先输出的thread1的内容呢?
其实那是因为你不了解线程的优先级实现原理。
线程的优先级并不是你想象的先执行哪个后执行哪个。
而是所有的线程不论优先级高低都会执行,。
优先级越高表示CPU分配给该线程的时间片越多,执行时间就多。
优先级越低表示CPU分配给该线程的时间片越少,执行时间就少。
包含头文件 #include <thread>。
1、std::thread 的使用非常放便和强大,该类几乎可以把任何函数作为线程主函数。
2、用法:
首先包含头文件 #include <thread>。
定义线程主函数: 根据不同的需要,线程的主函数可以是普通函数、函数对象、lambda表达式或者类成员函数。
建立std::thread对象,并把线程要运行的函数(线程主函数)以及相应的函数参数通过构造函数传递给该对象, 构造函数通常会海纳百川。
例程:
#include <thread>。
#include <iostream>。
class ThreadMain {。
public:
void operator()() {。
run();
}
void run() {。
std::cout << "Hello, C++11 thread\n";。
}
};
void generalFunc(int data) {。
std::cout << "Hello, C++11 thread\n";。
int main() {
ThreadMain tm;。
std::thread t1(generalFunc, 1); /*传递普通函数指针和参数0给thread对象t1*/。
std::thread t2(&ThreadMain::run, &tm); /*将成员函数传递给thread对象t2, 并且传递调用该函数的对象的指针&tm*/。
std::thread t3(tm); /*传递一个函数对象给t3*/。
std::thread t4([]() { std::cout << "Hello, C++11 thread\n"; }); /*传递lambda表达式给thread对象t4*/。
/* 调用join函数等待线程终止,并回收线程所占资源*/。
t1.join();
t2.join();
t3.join();
t4.join();