Help with tracking thread name in AGI Server

Hello Everyone I’ve been looking for a way to track the thread name in AGI server which I gave during the thread’s initialization:

Here’s the code in details:

for(int i = 1; i <= 2; i++) /for example im creating 2 threads here for originate

    Map<String,String> destinationMap = new HashMap();

    if(i ==1)
           destinationMap.put("numberToCall", "12345");   
    else if(i == 2)
           destinationMap.put("numberToCall", "678910");   

    OriginateAction originateAction; 
    ManagerResponse originateResponse; 

   originateAction = new OriginateAction(); 
   originateAction.setPriority(new Integer(1)); 
  originateAction.setTimeout(new Integer(30000));

  ManagerConnection something;

 ManagerConnectionFactory factory123 = new ManagerConnectionFactory( 
   "", "admin", "admin"); 

   something = factory123.createManagerConnection();


   Thread t = new Thread(new HelloManager.AGIServerTask(something,originateAction));

   t.setName("Thread " + i);



private static class AGIServerTask implements Runnable
private ManagerConnection managerConnection = null;
private OriginateAction originateAction = null;

    public AGIServerTask(ManagerConnection managerConnection, OriginateAction originateAction)
        this.managerConnection = managerConnection;
        this.originateAction = originateAction;
    public void run()
            managerResponse = managerConnection.sendAction(originateAction,90000);
            System.out.println("my name is " + Thread.currentThread().getName());
            //will println the "Thread i" which is exactly the name I assigned to my thread
            // If i record the end time here it is already late
        catch(IOException io)
        catch(TimeoutException te)

and here are my dialplan:

exten => 1239,1,NoOp(number to call is = ${numberToCall})
exten => 1239,2,Agi(agi://${numberToCall})

exten => 1300,1,Hangup()
exten => 1300,2,Answer()
exten => 1300,3,Playback(thank-you-for-calling)
exten => 1300,4,AMD()
exten => 1300,5,Agi(agi://${AMDSTATUS})

inside exten 1239 AGI server code I will issue:

System.out.println("thread name is " + Thread.currentThread().getName() );
// will println “Asterisk Daemon thread - Thread something” which is not what I want

exec(“Dial”,“SIP/CallOut/” + numberToCall + “@a2billing,60,G(from-internal-custom,1300,1)”);
//will transer the call to exten 1300 once someone answers

inside exten 1300 AGI server code I will issue:

 if(AMDStatus == human)
    //do something

So basically what I am doing is initializing as many threads and originate action as the number of people that I have in my database. I will then call all of them and will do some action if the AMD algorithm detect human (instead of fax or answering machine) on the called party.

I will also need to calculate the time it takes from the point I initiate the originateAction until the called party answers and confirmed human (lets assume that it is point starttime to endtime) for each call . In order to do that I will need to assign a unique name in each thread and later match point endtime with the corresponding point starttime. However,because the Thread.currentThread().getName() information is gone once we enter the section in AGI server, I willl not be able to know which thread is which.

Any suggestion in solving this?

Thank you so much