多线程Thread 执行的方法(有参数与无参数)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程Thread 执行的方法(有参数与无参数)相关的知识,希望对你有一定的参考价值。

参考技术A 我们看到Thread 的源文件

可以看出是常用的执行方法有ParameterizedThreadStart、与ThreadStart

so,我们只需要了解ParameterizedThreadStart与ThreadStart区别就可以掌握了

下面看例子:

1、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);

 

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

public static bool ControlSpeekingHornNew(string TowerCode, string even_type, string ip, int port, int isOpen, string buf)



             Thread_HornModel model = new Thread_HornModel();

            model.TowerCode = TowerCode;

            model.ip = ip;

            model.port = port;

            model.even_type = even_type;

            model.isOpen = isOpen;

            model.buf = buf;

            Thread _thread = new Thread(new ParameterizedThreadStart(ThreadControlSpeekingHornNew));

            _thread.Start(model);

            return true;



// 注意这里只能使用object类型,不能使用具体的 Thread_HornModel类型,传参进去再进行转换

public static void ThreadControlSpeekingHornNew(object resons)

       

            if(resons is Thread_HornModel)

           

                Thread_HornModel _data = (Thread_HornModel)(resons);

                string TowerCode = _data.TowerCode;

                string even_type = _data.even_type;

                string ip = _data.ip;

                int port = _data.port;

                int isOpen = _data.isOpen;

                string buf = _data.buf

              // do something

           

       

public class Thread_HornModel

   

        public string TowerCode get; set;

        public string even_type get; set;

        public string ip get; set;

        public int port get; set;

        public int isOpen get; set;

        public string buf get; set;

   

PYTHON——多线程:Thread类与线程函数

Thread类与线程函数

可以使用Thread对象的join方法等待线程执行完毕;主线程(main()函数)中调用Thread对象的join方法,并且Thread对象的线程函数没有执行完毕,主线程会处于阻塞状态。
使用Thread类实现多线程的步骤:
1、创建Thread类的实例;
2、通过Thread类的构造方法的target关键字参数执行线程函数;通过args关键字参数指定传给线程函数的参数。
3、调用Thread对象的start方法启动线程。
下面例子功能:使用Thread对象启动2个线程,并在各自的线程函数中使用sleep函数休眠一段时间。最后使用Thread对象的join方法等待两个线程函数都执行完毕后再推出程序。

实例代码:

import threading
from time import sleep,ctime

#线程函数,index表示整数类型的索引,sec表示休眠时间,单位:秒
def fun(index,sec):
    print(开始执行,index,时间:,ctime())
    sleep(sec)
    print(结束执行,index,时间:,ctime())

def main():
    #创建第一个Thread对象,通过target关键字参数指定线程函数fun,传入索引10和休眠时间4s
    thread1 = threading.Thread(target = fun,args = (10,4))
    #启动第一个线程
    thread1.start()
    #如上所述
    thread2 = threading.Thread(target=fun,args=(20,2))
    thread2.start()
    # 等待第一个线程thread1对象执行完毕
    thread1.join()
    # 等待第二个线程thread2对象执行完毕
    thread2.join()

if __name__==__main__:
    main()
    print(程序退出)

 






以上是关于多线程Thread 执行的方法(有参数与无参数)的主要内容,如果未能解决你的问题,请参考以下文章

java 多线程死循环怎么动态传参?急!

python多线程多进程以及GIL

Thread实现多线程死锁同步锁

多线程模块:thread

39. Python 多线程实例 多线程锁

Java多线程学习笔记— “Thread类三个方法:线程休眠sleep()线程礼让yield()线程强制执行join()”