Newer Version Available
FOR UPDATE
In Apex, you can use FOR
UPDATE to lock sObject records while they’re being updated in order to prevent
race conditions and other thread safety problems.
While an sObject record is locked, no other client or user is allowed to make updates either through code or the Salesforce user interface. The client locking the records can perform logic on the records and make updates with the guarantee that the locked records won’t be changed by another client during the lock period. The lock gets released when the transaction completes.
To lock a set of sObject records in Apex, embed the keywords FOR UPDATE after any inline SOQL statement. This example queries for two accounts
and also locks the accounts that are returned.
1Account [] accts = [SELECT Id FROM Account LIMIT 2 FOR UPDATE];