Please find out gather_table_stats defaults.
for example, what is default of estimate_percent --> auto or fixed value
you can also disable automatic gather job
select dbms_stats.get_param('estimate_percent') from dual;
select dbms_stats.get_param('degree') from dual;
compare default values with your stats command's value.
Didn't see your version mentioned but there may be no need to unlock them if you are updating them manually. Just add the force parameter to your call to gather_table_stats if your version has that option.
From the doc..
Gather statistics of table even if it is locked
It depends, it may or it may not.
As the default GATHER_AUTO mode is basically automatic pilot, oracle may or may not end up gathering stats for your table while it is unlocked, since the two statistics jobs overlap with each other for about two hours as you said.
The most sensible thing to do would be to change time of your customized stats job, in my opinion. The force option mentioned above would work as well.
By the way, you do realize that you're forcing histogram creation for every single column in your table? Is this what you're trying to achieve? Histograms may end up hurting your performance more than helping if you don't know exactly where to build them.