Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Jenkins管道脚本-线程编程_Multithreading_Jenkins_Jenkins Pipeline - Fatal编程技术网

Multithreading Jenkins管道脚本-线程编程

Multithreading Jenkins管道脚本-线程编程,multithreading,jenkins,jenkins-pipeline,Multithreading,Jenkins,Jenkins Pipeline,我试图在jenkins管道脚本中创建多个线程。所以,我举了一个简单的例子,如下所示。但它不起作用。你能告诉我吗 在下面的示例中,jobMap包含一个键作为字符串,值作为字符串列表。当我只是显示列表时,值会正确打印,但是当我使用3种不同的方法创建线程并显示时,它就不起作用了 for ( item in jobMap ) { def jobList = jobMap.get(item.key); **// The following

我试图在jenkins管道脚本中创建多个线程。所以,我举了一个简单的例子,如下所示。但它不起作用。你能告诉我吗

在下面的示例中,jobMap包含一个键作为字符串,值作为字符串列表。当我只是显示列表时,值会正确打印,但是当我使用3种不同的方法创建线程并显示时,它就不起作用了

for ( item in jobMap ) 
    {           
        def jobList = jobMap.get(item.key);

        **// The following loop is printing the values**
        for (jobb in jobList) 
        {
                 echo "${jobb}"
        }
//线程实现1:

//线程实现2:

//线程实现3:


詹金斯有一个特别的步骤-。在此步骤中,您可以构建另一个作业或调用管道代码

最好将管道代码视为Groovy的方言或子集

工作流脚本引擎中的CPS转换器(“continuation passing style”)将Groovy代码转换为可以以序列化形式解释、在不同jvm之间传递的代码

您可能会想象,这对于线程来说根本不起作用

如果需要线程,则必须在
@NonCPS
注释类或函数中工作。该类或函数不能调用任何CPS groovy代码,因此不能调用闭包、访问工作流脚本上下文等


这就是为什么最好使用
并行
步骤。

是的,请。使用Groovy线程从根本上说是错误的。
        Thread.start 
        {

                for (jobb in jobList) 
                {
                 echo "${jobb}"
                }

        }
        def t = new Thread({ echo 'hello' } as Runnable)
        t.start() ;
        t.join();
        t1 = new Thread( new TestMultiThreadSleep(jobList));
        t1.start();         
    }



    class TestMultiThreadSleep implements Runnable {
   String jobs;
   public TestMultiThreadSleep(List jobs) {
      this.jobs = jobs;
   }



     @Override
       public void run() 
{
       echo "coming here"
         for (jobb in jobs) 
            {
                 echo "${jobb}"
            }                      
       }
    }