In an @future method can I persist a data at the beginning of the execution and the others at the end? Pratically, can i open and close two different transactions in the same @future method?
In Salesforce, there is no explicit "commit" command; everything is committed at the end or not at all (exception: Platform Events always commit). Static variables are per-transaction, so they aren't shared across different transactions, unlike some other platforms (ASP comes to mind) that means a static variable in the same way that we mean Custom Settings. The usual way to avoid this problem is to use locking statements. This is the only means that we have to explicitly force one transaction to wait while another is using the data the first needs.
Based on the question in comments, the answer is no, two future methods can't share data (in the sense that two unrelated transactions cannot share data) since they are separate transactions. If one asynchronous process relies on the result of another asynchronous process, you could consider turning your future methods into
Queueable methods. Queueable methods can be called from other Queueable methods, so you can let one transaction finish its critical section, then start the next Queueable method (even before it has finished all of its processing).