package com.camnter.test.thread.communication; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; /** * Description:LooperThread * Created by:CaMnter */ public class CustomThread extends Thread { private AtomicBoolean start = new AtomicBoolean(true); private static final ThreadLocal<CopyOnWriteArrayList<Message>> messages = new ThreadLocal<>(); public CustomThread() { } public CustomThread(CopyOnWriteArrayList<Message> copyOnWriteArrayList) { if (messages.get() == null) { messages.set(copyOnWriteArrayList); } } public CopyOnWriteArrayList<Message> getMessages() { if (messages.get() == null) { messages.set(new CopyOnWriteArrayList<>()); } return messages.get(); } private synchronized void dispatch() { for (int i = 0; i < messages.get().size(); i++) { Message message = messages.get().get(i); message.h.callback(message.msg); } messages.get().clear(); } @Override public void run() { if (messages.get() == null) { messages.set(new CopyOnWriteArrayList<>()); } while (true) { if (!this.start.get()) { return; } this.dispatch(); } } public void quit() { this.start.set(false); this.interrupt(); } }