class Runner implements Runnable
{
 
   public void run()
   {
      System.out.println("In Runner method run()\n");
   
   } 
   
   public synchronized void funcB()
   {
     System.out.println("In Runner funcB \n");
 
 
   }
  
}
class TestRun 
{    public static void main(String args[])
{
    
Runner r=new Runner(); // run() method

TestRun t=new TestRun();

new Thread(r).start();
r.funcB();
t.funcA();



}
   public synchronized void funcA()
   {
   System.out.println("main method is here\n");   
     

   
   }
}看以上例子,有时候 public void run() 这个会第一个执行,但是多数情况下都是最后才执行,请问是什么决定线程执行的先后次序?