Best way to execute order of these scripts

I am using script

public class TileManager : MonoBehaviour {
public static TileManager instance;
private void Awake()
{
instance = this;
}
}

public class MapTile : ScriptableObject {

MainManager mainManager;
TileManager tileManager;
public GameObject[,] tileObjectMap;
public GameObject[,] tileFloorMap;

private void Awake()
{   
    tileManager = TileManager.instance;     
}

public void SaveMapTile()
{      
    //Here i am using tile manager but it's null(this Awake is called before than tile managers)
}

}

how to make this work?

You just broke one of the few rules when using singletons. There should only be a single access point to that singleton. That means you should not cache the singleton anywhere else.

Just use “TileManager.instance” whereever you need to access your TimeManager. Accessing static fields is actually faster than accessing an instance field.

Besides that it’s usually common practise to do a lazy singleton initialization through a static property.

public class TileManager : MonoBehaviour
{
    private static TileManager m_Instance = null;
    public static TileManager Instance
    {
        get
        {
            if (m_Instance == null)
            {
                m_Instance = FindObjectOfType<TileManager>();
                DontDestroyOnLoad(m_Instance.gameObject);
            }
            return m_Instance;
        }
    }
}