Refactoring Into Generic Methods
This is fairly easy to achieve. You need to make use of callback, which can perform the functionality specific to the method, which your generic method then uses. Something like this:

private void UpdatepPeople&lt;T&gt;(ConcurrentQueue&lt;pPeople&gt; people,
                              Func&lt;PersonClass, List&lt;T&gt;&gt; listProvider,
                              Func&lt;T, bool&gt; updateRequiredTest)
{
    var updateCount = 0; 
    var lockObject = new object();

    Parallel.ForEach&lt;pPeople&gt;(people, person =&gt;
    {
        listProvider(person).ForEach(item =&gt;
        {
            if (updateRequiredTest(item))
            {
                lock (lockObject)
                {
                    updateCount++;
                }
            }
        });
    });
}

private void UpdatepPeopleContactNumbersIDs(ConcurrentQueue&lt;pPeople&gt; people)
{
    UpdatepPeople&lt;ContactType&gt;(people,
                               person =&gt; person.myPeopleContactsList,
                               contact =&gt; contact.ID == 0);
}

private void UpdatepPeopleEmailIDs(ConcurrentQueue&lt;pPeople&gt; people)
{
    UpdatepPeople&lt;EmailType&gt;(people,
                               person =&gt; person.myPeopleEmailsList,
                               contact =&gt; emails.ID == 0);
}