template class ThreadSafeList { public: ThreadSafeList() {} T get(int index) { QMutexLocker locker(&mtx_); return list_.takeAt(index); } void put(T data) { QMutexLocker locker(&mtx_); list_.append(data); } QList list_; QMutex mtx_; } class Worker : public QObject, public QRunnable { Q_OBJECT public: Worker(ThreadSafeList* list) : list_(list) { } void run(); private: ThreadSafeList* list_; } class SomeClass { public: void someFun() { auto worker = new Worker(&list_); QThreadPool::globalInstance()->start(worker); auto anotherWorker = new Worker(&list_); QThreadPool::globalInstance()->start(anoterWorker); } private: ThreadSafeList list_; }