Maybe I'm missing something, but I would still make a central in-memory queue as a service which would also take care of correct process retrieval strategy, and updating product rows with statuses. I don't think it's a huge development overhead.
You clearly stated by yourself that there will be situations when threads will be blocked for a short term. Such a queue would pay off if you may need to increase number of threads.
As for this, you can double check before handing over to consumer:
Another problem is that, I assume that an operator can stop consuming a certain item by deleting it from database, If I used in memory queue, I will lose this future.
And, of course, it's a much clearer design.. you'll follow single responsibility principle, when producers and consumers will take care of only producing and consuming items.
As for:
1- Do I miss something in this design? Do you think it will work?
.. I don't see reasons it shouldn't be working. So you have to make a final decision based on the whole picture.