ThreadStart和ParameterizedThreadStart区别「建议收藏」

ThreadStart和ParameterizedThreadStart区别「建议收藏」ThreadStart:ThreadStart这个委托定义为voidThreadStart(),也就是说,所执行的方法不能有参数。ThreadStartthreadStart=newThread

大家好,又见面了,我是你们的朋友全栈君。

ThreadStart:

ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数。

ThreadStart threadStart=new ThreadStart(Calculate);
Thread thread=new Thread(threadStart);
thread.Start();
public void Calculate()
   {
 double Diameter=0.5;
 Console.Write("The Area Of Circle with a Diameter of {0} is {1}"Diameter,Diameter*Math.PI);
   }

       这里我们用定义了一个ThreadStart类型的委托,这个委托制定了线程需要执行的方法: Calculate,在这个方法里计算了一个直径为0.5的圆的周长,并输出.这就构成了最简单的多线程的例子,在很多情况下这就够用了

 

ParameterThreadStart:

ParameterThreadStart的定义为void ParameterizedThreadStart(object state),使用这个这个委托定义的线程的启动函数可以接受一个输入参数,具体例子如下 :

 

ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate)
Thread thread=new Thread() ;
thread.Start(0.9);
public void Calculate(object arg)
{
double Diameter=double(arg);
Console.Write("The Area Of Circle with a Diameter of {0} is {1}"Diameter,Diameter*Math.PI);
}

Calculate方法有一个为object类型的参数,虽然只有一个参数,而且还是object类型的,使用的时候尚需要类型转换,但是好在可以有参数了,并且通过把多个参数组合到一个类中,然后把这个类的实例作为参数传递,就可以实现多个参数传递.比如:

 

 

class AddParams
{
    public int a, b;

    public AddParams(int numb1, int numb2)
    {
      a = numb1;
      b = numb2;
    }
}
#endregion

class Program
{
    static void Main(string[] args)
    {
      Console.WriteLine("***** Adding with Thread objects *****");
      Console.WriteLine("ID of thread in Main(): {0}",
        Thread.CurrentThread.ManagedThreadId);

      AddParams ap = new AddParams(10, 10);
      Thread t = new Thread(new ParameterizedThreadStart(Add));
      t.Start(ap);
      Console.ReadLine();
    }

    #region Add method
    static void Add(object data)
    {
      if (data is AddParams)
      {
        Console.WriteLine("ID of thread in Main(): {0}",
          Thread.CurrentThread.ManagedThreadId);

        AddParams ap = (AddParams)data;
        Console.WriteLine("{0} + {1} is {2}",
          ap.a, ap.b, ap.a + ap.b);
      }
    }
    #endregion
}
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154623.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 检测网站死链工具

    检测网站死链工具检测网站死链工具

  • Linux zip加密压缩「建议收藏」

    Linux zip加密压缩「建议收藏」不加密:zip-r压缩文件.zip待压缩文件加密:zip-r-P’密码’压缩文件.zip待压缩文件

    2022年10月21日
  • eruda.js 移动端调试神器使用教程(eruda)

    eruda.js 移动端调试神器使用教程(eruda)在日常的移动端开发时,一般都是试用chrome浏览器的移动端模式进行开发和调试,只有在chrome调试完成,没有问题了才会上到真机测试,移动端开发的一大问题就在于此,各种品牌各种型号手机,手机中各种类型的浏览器APP…还好移动端的相对一致点,但是往往都会有一些各种各样的坑,这时候就蛋疼了,明明chrome调试工具中是正常的,一到某个浏览器中就炸了,怎么办,又无法像在chrome中使用调试工具进行调试,只能通过alert()弹窗来调试,有什么办法可以像PC上那样清晰,可视化的调试呢?使用示例://#

    2022年10月26日
  • 第二届全国大学生网络安全精英赛初赛错题笔记

    第二届全国大学生网络安全精英赛初赛错题笔记(一)1.通信保密阶段主要威胁:搭线窃听和密码分析主要措施:数据加密保护机密性和完整性开始标志:香农的《保密系统的信息理论》2.信息安全的阶段四个阶段:通信安全、计算机安全、信息安全、信息保障3.信息系统安全保障蕴含:生命周期、保障要素、安全特征4.完整性:确保信息在存储、使用、传输的过程中不会被非授权按用户篡改,同时还要防止授权用户对信息进行不恰当篡改,保持信息内外部表示的一致性国际标准化组织:IOS/OSI提供了五种安全服务:以及八类安全机制。五类安全服务:认证(鉴别)服

  • nextline函数_Java中的nextline()函数与next()问题

    nextline函数_Java中的nextline()函数与next()问题【写在前面】importJava.util.*;Scannerin=newScanner(http://System.in);【出现的问题】在循环中相连的nextLine();会出现第一个nextLine();跳过的问题.就像这个样子://部分代码for(inti=0;iSystem.out.println();Stringname=in.nextLine();System.o…

  • java excel转json

    java excel转jsonpackagecom.xmg.excel;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.net.URL;import…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号