多线程简单示例


 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading;
6 using System.Runtime.Remoting.Messaging;
7
8 namespace ThreadExample
9 {
10 class Program
11 {
12 delegate string MyDelegate(string msg);
13 static object locker=new object();
14
15 static void Main(string[] args)
16 {
17 WriteLine("Main Thread Begin ,ThreadId is : " + Thread.CurrentThread.ManagedThreadId, ConsoleColor.Green);
18 MyDelegate myDelegate = new MyDelegate(Messgae);
19 //异步调用,传入参数为object类型,此处用stirng示例
20 myDelegate.BeginInvoke("Hello Thread World!", Completed, "传参示例");
21 //模拟线程工作,可以看到两线程同时工作
22 for (int i = 0; i < 5; i++)
23 {
24 Thread.Sleep(1000);
25 WriteLine("Main Thread Works!", ConsoleColor.Green);
26 }
27 WriteLine("Main Thread Complete!", ConsoleColor.Green);
28 Console.ReadKey();
29 }
30
31 static string Messgae(string msg)
32 {
33 WriteLine("Async Thread Begin ,ThreadId is : " + Thread.CurrentThread.ManagedThreadId, ConsoleColor.Red);
34 //模拟线程工作,可以看到两线程同时工作
35 for (int i = 0; i < 5; i++)
36 {
37 Thread.Sleep(500);
38 WriteLine("Async Thread Works!", ConsoleColor.Red);
39 }
40 WriteLine("Async Thread Complete!", ConsoleColor.Red);
41 return msg;
42 }
43
44 static void Completed(IAsyncResult iresult)
45 {
46 //通过 Thread.CurrentThread.ManagedThreadId 可以看出,回调函数运行在异步线程上
47 WriteLine("Async Thread CallBack Begin,ThreadId is : " + Thread.CurrentThread.ManagedThreadId, ConsoleColor.Cyan);
48 AsyncResult result = iresult as AsyncResult;
49 //使用AsyncDelegate获得委托
50 MyDelegate myDelegate = result.AsyncDelegate as MyDelegate;
51 //使用EndInvoke获取返回值
52 string data = myDelegate.EndInvoke(result);
53 //用 AsyncState 获得传入的参数(即19行“传参示例”四个字)
54 string asyncState = result.AsyncState.ToString();
55 WriteLine(data, ConsoleColor.Cyan);
56 WriteLine(asyncState, ConsoleColor.Cyan);
57 //模拟回调函数工作
58 for (int i = 0; i < 3; i++)
59 {
60 Thread.Sleep(500);
61 WriteLine("Async Thread CallBack Works!", ConsoleColor.Cyan);
62 }
63 WriteLine("Async Thread CallBack Complete!", ConsoleColor.Cyan);
64 }
65
66 static void WriteLine(string data, ConsoleColor color)
67 {
68 lock (locker)
69 {
70 Console.ForegroundColor = color;
71 Console.WriteLine(data);
72 Console.ResetColor();
73 }
74 }
75 }
76 }

结果:

时间: 2024-10-09 06:26:12

多线程简单示例的相关文章

关于Task类处理多线程简单示例

1.定义一个线程 var task1 = Task.Factory.StartNew(() => DoSomeWork()):方法如下:          private static object DoSomeWork()        {            Console.WriteLine("nihao ");            System.Threading.Thread.Sleep(3000);            Console.Write("n

[pthread]Linux C 多线程简单示例

#include <stdio.h> #include <pthread.h> pthread_mutex_t mutex; pthread_cond_t cond; void *thread1(void *arg) { pthread_cleanup_push(pthread_mutex_unlock,&mutex); //提供函数回调保护 while(1){ printf("thread1 is running\n"); pthread_mutex_

gdb 调试openmp多线程程序 示例介绍

 首先一个简单程序源代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <omp.h> 4 int main(int argc, char * argv[]){ 5 int i, k,m,n; 6 printf("i=%d,threads_num=%d\n",i, omp_get_num_threads()); 7 printf("i=%d,thread_id=%d\n&quo

iOS开发多线程篇—多线程简单介绍

iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程

Java的多线程 简单入门

Java的多线程 简单入门 首先可以先搞清楚什么是程序.进程.线程,以及它们之间的关系: 定义: 一 程序只是一组指令的有序集合,它是静态的 二 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位: 三 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程: 进程与线程区别与联系 (

iOS多线程技术—多线程简单介绍

iOS多线程技术—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程的

AMQP消息队列之RabbitMQ简单示例

前面一篇文章讲了如何快速搭建一个ActiveMQ的示例程序,ActiveMQ是JMS的实现,那这篇文章就再看下另外一种消息队列AMQP的代表实现RabbitMQ的简单示例吧.在具体讲解之前,先通过一个图来概览下: 1.添加Maven依赖 <!-- rabbitmq begin --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit

HMM的维特比算法简单示例

今天读了一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的.现在上传之. package com.txq.hmm import java.utilimport scala.collection._ /** * HMM维特比算法,根据显示状态链条估计隐式链条 * @param states 隐式states * @param observations 显式states * @param start_probability 初始概率向量

spring-servlet.xml简单示例

spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 1 <!-- springMVC简单配置 --> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://w