The title isn’t exactly accurate – you can’t “restart” an app per se – but you can get pretty close:

// presumably in an Activity; otherwise a Context instance will be needed for several methods
Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

This starts the Activity specified in your manifest as the “LAUNCHER”, in a new task stack (history), and clear the existing stack.