线程的参数传递

线程大家都听说过,也或多或少的看到过或使用过。但对于线程中的参数传递可能会比较陌生,今天我在这就跟大家分享下线程的传递方法。

在分享线程的参数传递方法之前我们先来看看不带参的线程:

using System.Threading;(在使用线程前别忘记了加上命名空间)

public class threadclass

{

public static void getThread()

{

Thread thread=new Thread(T);//Thread thread=new Thread(new ThreadStart(T));//两句效果相同

thread.start();

}

public string T()

{

return 0;

}

}

上面的代码是在threadclass类中以一个getThread()函数去使用线程;不知道大家有没有留意到类中函数的第一行的注释,在注释里面有个ThreadStart;

在线程中ThreadStart主是用来定义不带参的线程,这也是我们经常用到的一个方法。

接下来我们来看看带参数传递的线程:

using System.Threading;(在使用线程前别忘记了加上命名空间)

public class threadclass

{

public static void getThread()

{

Thread thread=new Thread(new ParameterizedThreadStart(T));

thread.start(10);

}

public string T(object i)

{

string str=i.Tostring();

return str;

}

}

我们来比较下和不带参数的线程使用有什么区别:

1.不带参的线程是使用ThreadStart来定义的,而带参数传递的线程是用parameterizedThreadStart定义;

2.线程所调用的方法一个没有带任何参数另一个带有一个object参数;

3.在启用线程(Start())时,其中带参数传递的线程是有参数的,而不带参的就没有。

从这些区别中我们能来做个总结,在使用不带参的线程时用ThreadStart来定义线程,带参数传递的线程是用parameterizedThreadStart定义;线程带参传递时是用Start来传递。

现在让我们一起来了解下ParameterizdeThreadStart,在使用ParameterizedThreadStart定义的线程中,线程可以接受一个object参数,但必须中有一个在多就不行;所以在带参数的线程中调用的方法只有一个object参数。

到这里可能有人会问,如果我要传递两个或两个以上应该怎么办,带参数传递的线程方法就只能传递一个参数;哪不是没用外不大吗?下面我给大家一种传递两个参数的方法,代码如下:

using System.Threading;(在使用线程前别忘记了加上命名空间)

public class threadclass

{

public static void getThread()

{

Thread thread=new Thread(new ParameterizedThreadStart(T));

thread.start(10);

}

public string T(object i)

{

string str=i.Tostring();

string b="你好";

string S=T2(str,b);

return S;

}

public string T2(string i,string j)

{

string s=i+","+j+"";

return  s;

}

}

时间: 2024-10-16 03:32:03

线程的参数传递的相关文章

可重入,异步信息安全,线程安全

这三个概念一直纠缠着我,我也时不时的会拿出来辨析下,直到昨天才发现自己可以把它们理顺了.所以学习就是这样一个反复的过程,最终达到顿悟的效果.本文主要参考APUE第三版英文版第10.6和12.5节,以及WIKI百科,还有CSDN和stackoverflow中对这些概念的讨论,然后给出一份自己认为比较合理的理解. ? I. 中断,信号,线程切换 这三个概念都牵涉到异步通信,即运行中的代码不可预测什么时候会发生中断,什么时候会收到信号,什么时候会发生线程切换: 中断,一般指的硬件中断,是硬件对cpu的

9 C++ Boost 多线程,线程同步

线程的创建 boost_thread,boost_system 多线程的创建 线程的参数传递 线程的创建方式 线程的join 加入join,回收线程 线程中断 线程中断2, 线程组 boost 线程的死锁 boost 线程递归锁 线程互斥锁,线程同步 unique_lock 锁,离开作用域自动释放 unique_lock 锁 示例 2,可以显式的释放锁 boost 1次初始化 boost 条件变量 boost 线程锁,一个账户往另外一个账户转钱案例 boost upgrade_lock 知识背景

linux可重入、异步信号安全和线程安全

一 可重入函数 当一个被捕获的信号被一个进程处理时,进程执行的普通的指令序列会被一个信号处理器暂时地中断.它首先执行该信号处理程序中的指令.如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕获到信号时进程正在执行的正常指令序列(这和当一个硬件中断发生是所发生的事情相似.)但是在信号处理器里,我们并不知道当信号被捕获时进程正在执行哪里的代码. 如果进程正使用malloc在它的堆上分配额外的内存,而此时由于捕捉到信号而插入执行该信号处理程序,其中又调用了malloc,这会

python第十一天-----补:线程池

低版本: 1 #!/usr/bin/env python 2 import threading 3 import time 4 import queue 5 6 7 class TreadPool: 8 """ 9 将线程加入到队列中作为资源去完成任务 10 优点:简单好写容易理解 11 缺点:太尼玛多了..... 12 """ 13 def __init__(self, maxsize): 14 self.maxsize = maxsize 1

线程池的原理和实现

一. 线程池的简介 通常我们使用多线程的方式是,需要时创建一个新的线程,在这个线程里执行特定的任务,然后在任务完成后退出.这在一般的应用里已经能够满足我们应用的需求,毕竟我们并不是什么时候都需要创建大量的线程,并在它们执行一个简单的任务后销毁. 但是在一些web.email.database等应用里,比如彩铃,我们的应用在任何时候都要准备应对数目巨大的连接请求,同时,这些请求所要完成的任务却又可能非常的简单,即只占用很少的处理时间.这时,我们的应用有可能处于不停的创建线程并销毁线程的状态.虽说比

python 线程队列,线程池

一. 线程队列 引入线程队列 : import queue #和普通队列引入方法相同 线程队列方法 : q = queue.Queue() #实例化对列,先进先出 q = queue.LifoQueue() #实例化队列,后进先出 ( Last in, first out ) q = queue.PriorityQueue() #实例化队列,优先级队列 优先级队列,put() 方法接收的是一个元组,第一个元素是优先级,第二个元素是数据 优先级如果为数字,按照数字大小比较 如果优先级是字符串或特殊

python线程互斥锁Lock(29)

在前一篇文章 python线程创建和传参 中我们介绍了关于python线程的一些简单函数使用和线程的参数传递,使用多线程可以同时执行多个任务,提高开发效率,但是在实际开发中往往我们会碰到线程同步问题,假如有这样一个场景:对全局变量累加1000000次,为了提高效率,我们可以使用多线程完成,示例代码如下: # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解忧 @Blog(个人博客地址): shuopython

Android中socket初体验

最近要做一个Android的项目,用到socket和服务器之间交互,研究了一个小demo.主要遇到了以下几个问题: 1.客户端创建socket对象时一直失败NetworkOnMainThreadException,查了一下,原因是4.0之后在主线程中执行http请求会报这个错.解决办法是将代码放到了一个新线程中,问题就解决了. 2.服务器接收到客户端信息后反馈给客户端信息,将该信息表示在客户端UI上时报“android.view.ViewRoot$CalledFromWrongThreadExc

QObject成员函数connect()函数

1:首先要链接的两个类必须继承于QObject,同时添加 Q_OBJECT. 2:在qt中QObject::connect中填写的signal和slot函数,一定要填写参数类型. 因为类中的函数可以,也就是,重载函数名一样,参数不一样,如果QObject::connect中的函数没有参数类型,则无法正确连接. 3:QObject::connect中的signal 和 slot 函数一定要有参数类型, 但是,不可以有参数: You must use the SIGNAL() and SLOT()