生产都消费者模式的一个demo,消费者设置缓存

package queue;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * Created by MyWorld on 2016/2/1.
 */
public class App {
    public static LinkedBlockingQueue<String> queue = new LinkedBlockingQueue(2);
    public static ExecutorService executorService = new ThreadPoolExecutor(5, 10,
            60L, TimeUnit.SECONDS,
            new LinkedBlockingQueue<Runnable>());

    public static void main(String[] args) {
        App.executorService.execute(new Producer());
        while (true) {
            System.out.println(String.format("%s current size: %s", Thread.currentThread().toString(), queue.size()));
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}
package queue;

import java.util.Random;
import java.util.concurrent.TimeUnit;

/**
 * Created by MyWorld on 2016/2/1.
 */
public class Producer implements Runnable {
    static {
        System.out.println(String.format("%s success to init", Thread.currentThread().toString()));
        App.executorService.execute(new ConsumerManager());
    }

    @Override
    public void run() {
        String[] chars = {"A", "B", "C", "D"};
        Random random = new Random();
        while (true) {
            String tag = chars[random.nextInt(3)];
            for (int i = 0; i < 100; i++) {
                String produceValue = tag + i;
                System.out.println(String.format("%s produce value: %s", Thread.currentThread().toString(), produceValue));
                App.queue.add(produceValue);
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
package queue;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * Created by MyWorld on 2016/2/1.
 */
public class ConsumerManager implements Runnable {
    @Override
    public void run() {
        Set<String> cache = new HashSet<String>();
        while (true) {
            try {
                String value = App.queue.poll(5, TimeUnit.SECONDS);
                if (value == null) {
                    if (!cache.isEmpty()) {
                        cache = addToDo(cache);
                    }
                    value = App.queue.take();
                    System.out.println(String.format("%s take value: %s", Thread.currentThread().toString(), value));
                    cache.add(value);
                } else {
                    System.out.println(String.format("%s poll value: %s", Thread.currentThread().toString(), value));
                    cache.add(value);
                    if (cache.size() > 10) {
                        cache = addToDo(cache);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private Set<String> addToDo(Set<String> cache) {
        App.executorService.execute(new Worker(cache));
        cache = new HashSet<String>();
        return cache;
    }

}
package queue;

import java.util.Set;

/**
 * Created by MyWorld on 2016/2/1.
 */
public class Worker implements Runnable {
    private Set<String> cache;

    public Worker(Set<String> cache) {
        this.cache = cache;
    }

    @Override
    public void run() {
        for (String value : cache) {
            System.out.println(String.format("%s worker consume value: %s", Thread.currentThread().toString(), value));
        }
    }
}

Output:

Thread[main,5,main] success to init
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C0
Thread[pool-1-thread-1,5,main] poll value: C0
Thread[pool-1-thread-2,5,main] produce value: C1
Thread[pool-1-thread-1,5,main] poll value: C1
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C2
Thread[pool-1-thread-1,5,main] poll value: C2
Thread[pool-1-thread-2,5,main] produce value: C3
Thread[pool-1-thread-1,5,main] poll value: C3
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C4
Thread[pool-1-thread-1,5,main] poll value: C4
Thread[pool-1-thread-2,5,main] produce value: C5
Thread[pool-1-thread-1,5,main] poll value: C5
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C6
Thread[pool-1-thread-1,5,main] poll value: C6
Thread[pool-1-thread-2,5,main] produce value: C7
Thread[pool-1-thread-1,5,main] poll value: C7
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C8
Thread[pool-1-thread-1,5,main] poll value: C8
Thread[pool-1-thread-2,5,main] produce value: C9
Thread[pool-1-thread-1,5,main] poll value: C9
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C10
Thread[pool-1-thread-1,5,main] poll value: C10
Thread[pool-1-thread-3,5,main] worker consume value: C8
Thread[pool-1-thread-3,5,main] worker consume value: C7
Thread[pool-1-thread-3,5,main] worker consume value: C9
Thread[pool-1-thread-3,5,main] worker consume value: C4
Thread[pool-1-thread-3,5,main] worker consume value: C3
Thread[pool-1-thread-3,5,main] worker consume value: C6
Thread[pool-1-thread-3,5,main] worker consume value: C5
Thread[pool-1-thread-3,5,main] worker consume value: C0
Thread[pool-1-thread-3,5,main] worker consume value: C10
Thread[pool-1-thread-3,5,main] worker consume value: C1
Thread[pool-1-thread-3,5,main] worker consume value: C2
Thread[pool-1-thread-2,5,main] produce value: C11
Thread[pool-1-thread-1,5,main] poll value: C11
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C12
Thread[pool-1-thread-1,5,main] poll value: C12
Thread[pool-1-thread-2,5,main] produce value: C13
Thread[pool-1-thread-1,5,main] poll value: C13
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C14
Thread[pool-1-thread-1,5,main] poll value: C14
Thread[pool-1-thread-2,5,main] produce value: C15
Thread[pool-1-thread-1,5,main] poll value: C15
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C16
Thread[pool-1-thread-1,5,main] poll value: C16
Thread[pool-1-thread-2,5,main] produce value: C17
Thread[pool-1-thread-1,5,main] poll value: C17
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C18
Thread[pool-1-thread-1,5,main] poll value: C18
Thread[pool-1-thread-2,5,main] produce value: C19
Thread[pool-1-thread-1,5,main] poll value: C19
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C20
Thread[pool-1-thread-1,5,main] poll value: C20
Thread[pool-1-thread-2,5,main] produce value: C21
Thread[pool-1-thread-1,5,main] poll value: C21
Thread[pool-1-thread-4,5,main] worker consume value: C16
Thread[pool-1-thread-4,5,main] worker consume value: C17
Thread[pool-1-thread-4,5,main] worker consume value: C18
Thread[pool-1-thread-4,5,main] worker consume value: C19
Thread[pool-1-thread-4,5,main] worker consume value: C11
Thread[pool-1-thread-4,5,main] worker consume value: C21
Thread[pool-1-thread-4,5,main] worker consume value: C12
Thread[pool-1-thread-4,5,main] worker consume value: C13
Thread[pool-1-thread-4,5,main] worker consume value: C14
Thread[pool-1-thread-4,5,main] worker consume value: C20
Thread[pool-1-thread-4,5,main] worker consume value: C15
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C22
Thread[pool-1-thread-1,5,main] poll value: C22
Thread[pool-1-thread-2,5,main] produce value: C23
Thread[pool-1-thread-1,5,main] poll value: C23
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C24
Thread[pool-1-thread-1,5,main] poll value: C24
Thread[pool-1-thread-2,5,main] produce value: C25
Thread[pool-1-thread-1,5,main] poll value: C25
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C26
Thread[pool-1-thread-1,5,main] poll value: C26
Thread[pool-1-thread-2,5,main] produce value: C27
Thread[pool-1-thread-1,5,main] poll value: C27
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C28
Thread[pool-1-thread-1,5,main] poll value: C28
Thread[pool-1-thread-2,5,main] produce value: C29
Thread[pool-1-thread-1,5,main] poll value: C29
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C30
Thread[pool-1-thread-1,5,main] poll value: C30
Thread[pool-1-thread-2,5,main] produce value: C31
Thread[pool-1-thread-1,5,main] poll value: C31
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C32
Thread[pool-1-thread-1,5,main] poll value: C32
Thread[pool-1-thread-5,5,main] worker consume value: C29
Thread[pool-1-thread-5,5,main] worker consume value: C27
Thread[pool-1-thread-5,5,main] worker consume value: C28
Thread[pool-1-thread-5,5,main] worker consume value: C25
Thread[pool-1-thread-5,5,main] worker consume value: C26
Thread[pool-1-thread-5,5,main] worker consume value: C23
Thread[pool-1-thread-5,5,main] worker consume value: C24
Thread[pool-1-thread-5,5,main] worker consume value: C30
Thread[pool-1-thread-5,5,main] worker consume value: C31
Thread[pool-1-thread-5,5,main] worker consume value: C22
Thread[pool-1-thread-5,5,main] worker consume value: C32
Thread[pool-1-thread-2,5,main] produce value: C33
Thread[pool-1-thread-1,5,main] poll value: C33
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C34
Thread[pool-1-thread-1,5,main] poll value: C34
Thread[pool-1-thread-2,5,main] produce value: C35
Thread[pool-1-thread-1,5,main] poll value: C35
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C36
Thread[pool-1-thread-1,5,main] poll value: C36
Thread[pool-1-thread-2,5,main] produce value: C37
Thread[pool-1-thread-1,5,main] poll value: C37
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C38
Thread[pool-1-thread-1,5,main] poll value: C38
Thread[pool-1-thread-2,5,main] produce value: C39
Thread[pool-1-thread-1,5,main] poll value: C39
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C40
Thread[pool-1-thread-1,5,main] poll value: C40
Thread[pool-1-thread-2,5,main] produce value: C41
Thread[pool-1-thread-1,5,main] poll value: C41
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C42
Thread[pool-1-thread-1,5,main] poll value: C42
Thread[pool-1-thread-2,5,main] produce value: C43
Thread[pool-1-thread-1,5,main] poll value: C43
Thread[pool-1-thread-3,5,main] worker consume value: C40
Thread[pool-1-thread-3,5,main] worker consume value: C42
Thread[pool-1-thread-3,5,main] worker consume value: C38
Thread[pool-1-thread-3,5,main] worker consume value: C41
Thread[pool-1-thread-3,5,main] worker consume value: C39
Thread[pool-1-thread-3,5,main] worker consume value: C43
Thread[pool-1-thread-3,5,main] worker consume value: C34
Thread[pool-1-thread-3,5,main] worker consume value: C35
Thread[pool-1-thread-3,5,main] worker consume value: C36
Thread[pool-1-thread-3,5,main] worker consume value: C37
Thread[pool-1-thread-3,5,main] worker consume value: C33
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C44
Thread[pool-1-thread-1,5,main] poll value: C44
Thread[pool-1-thread-2,5,main] produce value: C45
Thread[pool-1-thread-1,5,main] poll value: C45
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C46
Thread[pool-1-thread-1,5,main] poll value: C46
Thread[pool-1-thread-2,5,main] produce value: C47
Thread[pool-1-thread-1,5,main] poll value: C47
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C48
Thread[pool-1-thread-1,5,main] poll value: C48
Thread[pool-1-thread-2,5,main] produce value: C49
Thread[pool-1-thread-1,5,main] poll value: C49
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C50
Thread[pool-1-thread-1,5,main] poll value: C50
Thread[pool-1-thread-2,5,main] produce value: C51
Thread[pool-1-thread-1,5,main] poll value: C51
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C52
Thread[pool-1-thread-1,5,main] poll value: C52
Thread[pool-1-thread-2,5,main] produce value: C53
Thread[pool-1-thread-1,5,main] poll value: C53
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C54
Thread[pool-1-thread-1,5,main] poll value: C54
Thread[pool-1-thread-4,5,main] worker consume value: C46
Thread[pool-1-thread-4,5,main] worker consume value: C45
Thread[pool-1-thread-4,5,main] worker consume value: C48
Thread[pool-1-thread-4,5,main] worker consume value: C47
Thread[pool-1-thread-4,5,main] worker consume value: C54
Thread[pool-1-thread-4,5,main] worker consume value: C53
Thread[pool-1-thread-4,5,main] worker consume value: C44
Thread[pool-1-thread-4,5,main] worker consume value: C52
Thread[pool-1-thread-4,5,main] worker consume value: C50
Thread[pool-1-thread-4,5,main] worker consume value: C51
Thread[pool-1-thread-4,5,main] worker consume value: C49
Thread[pool-1-thread-2,5,main] produce value: C55
Thread[pool-1-thread-1,5,main] poll value: C55
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C56
Thread[pool-1-thread-1,5,main] poll value: C56
Thread[pool-1-thread-2,5,main] produce value: C57
Thread[pool-1-thread-1,5,main] poll value: C57
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C58
Thread[pool-1-thread-1,5,main] poll value: C58
Thread[pool-1-thread-2,5,main] produce value: C59
Thread[pool-1-thread-1,5,main] poll value: C59
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C60
Thread[pool-1-thread-1,5,main] poll value: C60
Thread[pool-1-thread-2,5,main] produce value: C61
Thread[pool-1-thread-1,5,main] poll value: C61
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C62
Thread[pool-1-thread-1,5,main] poll value: C62
Thread[pool-1-thread-2,5,main] produce value: C63
Thread[pool-1-thread-1,5,main] poll value: C63
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C64
Thread[pool-1-thread-1,5,main] poll value: C64
Thread[pool-1-thread-2,5,main] produce value: C65
Thread[pool-1-thread-1,5,main] poll value: C65
Thread[pool-1-thread-5,5,main] worker consume value: C64
Thread[pool-1-thread-5,5,main] worker consume value: C59
Thread[pool-1-thread-5,5,main] worker consume value: C63
Thread[pool-1-thread-5,5,main] worker consume value: C58
Thread[pool-1-thread-5,5,main] worker consume value: C57
Thread[pool-1-thread-5,5,main] worker consume value: C65
Thread[pool-1-thread-5,5,main] worker consume value: C56
Thread[pool-1-thread-5,5,main] worker consume value: C55
Thread[pool-1-thread-5,5,main] worker consume value: C61
Thread[pool-1-thread-5,5,main] worker consume value: C62
Thread[pool-1-thread-5,5,main] worker consume value: C60
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C66
Thread[pool-1-thread-1,5,main] poll value: C66
Thread[pool-1-thread-2,5,main] produce value: C67
Thread[pool-1-thread-1,5,main] poll value: C67
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C68
Thread[pool-1-thread-1,5,main] poll value: C68
Thread[pool-1-thread-2,5,main] produce value: C69
Thread[pool-1-thread-1,5,main] poll value: C69
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C70
Thread[pool-1-thread-1,5,main] poll value: C70
Thread[pool-1-thread-2,5,main] produce value: C71
Thread[pool-1-thread-1,5,main] poll value: C71
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C72
Thread[pool-1-thread-1,5,main] poll value: C72
Thread[pool-1-thread-2,5,main] produce value: C73
Thread[pool-1-thread-1,5,main] poll value: C73
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C74
Thread[pool-1-thread-1,5,main] poll value: C74
Thread[pool-1-thread-2,5,main] produce value: C75
Thread[pool-1-thread-1,5,main] poll value: C75
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C76
Thread[pool-1-thread-1,5,main] poll value: C76
Thread[pool-1-thread-3,5,main] worker consume value: C76
Thread[pool-1-thread-3,5,main] worker consume value: C75
Thread[pool-1-thread-3,5,main] worker consume value: C66
Thread[pool-1-thread-3,5,main] worker consume value: C74
Thread[pool-1-thread-3,5,main] worker consume value: C68
Thread[pool-1-thread-3,5,main] worker consume value: C67
Thread[pool-1-thread-3,5,main] worker consume value: C69
Thread[pool-1-thread-3,5,main] worker consume value: C70
Thread[pool-1-thread-3,5,main] worker consume value: C71
Thread[pool-1-thread-3,5,main] worker consume value: C72
Thread[pool-1-thread-3,5,main] worker consume value: C73
Thread[pool-1-thread-2,5,main] produce value: C77
Thread[pool-1-thread-1,5,main] poll value: C77
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C78
Thread[pool-1-thread-1,5,main] poll value: C78
Thread[pool-1-thread-2,5,main] produce value: C79
Thread[pool-1-thread-1,5,main] poll value: C79
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C80
Thread[pool-1-thread-1,5,main] poll value: C80
Thread[pool-1-thread-2,5,main] produce value: C81
Thread[pool-1-thread-1,5,main] poll value: C81
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C82
Thread[pool-1-thread-1,5,main] poll value: C82
Thread[pool-1-thread-2,5,main] produce value: C83
Thread[pool-1-thread-1,5,main] poll value: C83
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C84
Thread[pool-1-thread-1,5,main] poll value: C84
Thread[pool-1-thread-2,5,main] produce value: C85
Thread[pool-1-thread-1,5,main] poll value: C85
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C86
Thread[pool-1-thread-1,5,main] poll value: C86
Thread[pool-1-thread-2,5,main] produce value: C87
Thread[pool-1-thread-1,5,main] poll value: C87
Thread[pool-1-thread-4,5,main] worker consume value: C77
Thread[pool-1-thread-4,5,main] worker consume value: C79
Thread[pool-1-thread-4,5,main] worker consume value: C78
Thread[pool-1-thread-4,5,main] worker consume value: C80
Thread[pool-1-thread-4,5,main] worker consume value: C85
Thread[pool-1-thread-4,5,main] worker consume value: C83
Thread[pool-1-thread-4,5,main] worker consume value: C86
Thread[pool-1-thread-4,5,main] worker consume value: C84
Thread[pool-1-thread-4,5,main] worker consume value: C87
Thread[pool-1-thread-4,5,main] worker consume value: C81
Thread[pool-1-thread-4,5,main] worker consume value: C82
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C88
Thread[pool-1-thread-1,5,main] poll value: C88
Thread[pool-1-thread-2,5,main] produce value: C89
Thread[pool-1-thread-1,5,main] poll value: C89
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C90
Thread[pool-1-thread-1,5,main] poll value: C90
Thread[pool-1-thread-2,5,main] produce value: C91
Thread[pool-1-thread-1,5,main] poll value: C91
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C92
Thread[pool-1-thread-1,5,main] poll value: C92
Thread[pool-1-thread-2,5,main] produce value: C93
Thread[pool-1-thread-1,5,main] poll value: C93
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C94
Thread[pool-1-thread-1,5,main] poll value: C94
Thread[pool-1-thread-2,5,main] produce value: C95
Thread[pool-1-thread-1,5,main] poll value: C95
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C96
Thread[pool-1-thread-1,5,main] poll value: C96
Thread[pool-1-thread-2,5,main] produce value: C97
Thread[pool-1-thread-1,5,main] poll value: C97
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: C98
Thread[pool-1-thread-1,5,main] poll value: C98
Thread[pool-1-thread-5,5,main] worker consume value: C93
Thread[pool-1-thread-5,5,main] worker consume value: C92
Thread[pool-1-thread-5,5,main] worker consume value: C95
Thread[pool-1-thread-5,5,main] worker consume value: C94
Thread[pool-1-thread-5,5,main] worker consume value: C91
Thread[pool-1-thread-5,5,main] worker consume value: C90
Thread[pool-1-thread-5,5,main] worker consume value: C89
Thread[pool-1-thread-5,5,main] worker consume value: C98
Thread[pool-1-thread-5,5,main] worker consume value: C96
Thread[pool-1-thread-5,5,main] worker consume value: C97
Thread[pool-1-thread-5,5,main] worker consume value: C88
Thread[pool-1-thread-2,5,main] produce value: C99
Thread[pool-1-thread-1,5,main] poll value: C99
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A0
Thread[pool-1-thread-1,5,main] poll value: A0
Thread[pool-1-thread-2,5,main] produce value: A1
Thread[pool-1-thread-1,5,main] poll value: A1
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A2
Thread[pool-1-thread-1,5,main] poll value: A2
Thread[pool-1-thread-2,5,main] produce value: A3
Thread[pool-1-thread-1,5,main] poll value: A3
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A4
Thread[pool-1-thread-1,5,main] poll value: A4
Thread[pool-1-thread-2,5,main] produce value: A5
Thread[pool-1-thread-1,5,main] poll value: A5
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A6
Thread[pool-1-thread-1,5,main] poll value: A6
Thread[pool-1-thread-2,5,main] produce value: A7
Thread[pool-1-thread-1,5,main] poll value: A7
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A8
Thread[pool-1-thread-1,5,main] poll value: A8
Thread[pool-1-thread-2,5,main] produce value: A9
Thread[pool-1-thread-1,5,main] poll value: A9
Thread[pool-1-thread-3,5,main] worker consume value: A2
Thread[pool-1-thread-3,5,main] worker consume value: A1
Thread[pool-1-thread-3,5,main] worker consume value: A4
Thread[pool-1-thread-3,5,main] worker consume value: A3
Thread[pool-1-thread-3,5,main] worker consume value: A6
Thread[pool-1-thread-3,5,main] worker consume value: A5
Thread[pool-1-thread-3,5,main] worker consume value: A8
Thread[pool-1-thread-3,5,main] worker consume value: A7
Thread[pool-1-thread-3,5,main] worker consume value: A9
Thread[pool-1-thread-3,5,main] worker consume value: C99
Thread[pool-1-thread-3,5,main] worker consume value: A0
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A10
Thread[pool-1-thread-1,5,main] poll value: A10
Thread[pool-1-thread-2,5,main] produce value: A11
Thread[pool-1-thread-1,5,main] poll value: A11
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A12
Thread[pool-1-thread-1,5,main] poll value: A12
Thread[pool-1-thread-2,5,main] produce value: A13
Thread[pool-1-thread-1,5,main] poll value: A13
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A14
Thread[pool-1-thread-1,5,main] poll value: A14
Thread[pool-1-thread-2,5,main] produce value: A15
Thread[pool-1-thread-1,5,main] poll value: A15
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A16
Thread[pool-1-thread-1,5,main] poll value: A16
Thread[pool-1-thread-2,5,main] produce value: A17
Thread[pool-1-thread-1,5,main] poll value: A17
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A18
Thread[pool-1-thread-1,5,main] poll value: A18
Thread[pool-1-thread-2,5,main] produce value: A19
Thread[pool-1-thread-1,5,main] poll value: A19
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A20
Thread[pool-1-thread-1,5,main] poll value: A20
Thread[pool-1-thread-4,5,main] worker consume value: A19
Thread[pool-1-thread-4,5,main] worker consume value: A18
Thread[pool-1-thread-4,5,main] worker consume value: A20
Thread[pool-1-thread-4,5,main] worker consume value: A11
Thread[pool-1-thread-4,5,main] worker consume value: A10
Thread[pool-1-thread-4,5,main] worker consume value: A13
Thread[pool-1-thread-4,5,main] worker consume value: A12
Thread[pool-1-thread-4,5,main] worker consume value: A15
Thread[pool-1-thread-4,5,main] worker consume value: A14
Thread[pool-1-thread-4,5,main] worker consume value: A17
Thread[pool-1-thread-4,5,main] worker consume value: A16
Thread[pool-1-thread-2,5,main] produce value: A21
Thread[pool-1-thread-1,5,main] poll value: A21
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A22
Thread[pool-1-thread-1,5,main] poll value: A22
Thread[pool-1-thread-2,5,main] produce value: A23
Thread[pool-1-thread-1,5,main] poll value: A23
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A24
Thread[pool-1-thread-1,5,main] poll value: A24
Thread[pool-1-thread-2,5,main] produce value: A25
Thread[pool-1-thread-1,5,main] poll value: A25
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A26
Thread[pool-1-thread-1,5,main] poll value: A26
Thread[pool-1-thread-2,5,main] produce value: A27
Thread[pool-1-thread-1,5,main] poll value: A27
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A28
Thread[pool-1-thread-1,5,main] poll value: A28
Thread[pool-1-thread-2,5,main] produce value: A29
Thread[pool-1-thread-1,5,main] poll value: A29
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A30
Thread[pool-1-thread-1,5,main] poll value: A30
Thread[pool-1-thread-2,5,main] produce value: A31
Thread[pool-1-thread-1,5,main] poll value: A31
Thread[pool-1-thread-5,5,main] worker consume value: A30
Thread[pool-1-thread-5,5,main] worker consume value: A31
Thread[pool-1-thread-5,5,main] worker consume value: A29
Thread[pool-1-thread-5,5,main] worker consume value: A28
Thread[pool-1-thread-5,5,main] worker consume value: A27
Thread[pool-1-thread-5,5,main] worker consume value: A26
Thread[pool-1-thread-5,5,main] worker consume value: A25
Thread[pool-1-thread-5,5,main] worker consume value: A24
Thread[pool-1-thread-5,5,main] worker consume value: A23
Thread[pool-1-thread-5,5,main] worker consume value: A22
Thread[pool-1-thread-5,5,main] worker consume value: A21
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A32
Thread[pool-1-thread-1,5,main] poll value: A32
Thread[pool-1-thread-2,5,main] produce value: A33
Thread[pool-1-thread-1,5,main] poll value: A33
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A34
Thread[pool-1-thread-1,5,main] poll value: A34
Thread[pool-1-thread-2,5,main] produce value: A35
Thread[pool-1-thread-1,5,main] poll value: A35
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A36
Thread[pool-1-thread-1,5,main] poll value: A36
Thread[pool-1-thread-2,5,main] produce value: A37
Thread[pool-1-thread-1,5,main] poll value: A37
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A38
Thread[pool-1-thread-1,5,main] poll value: A38
Thread[pool-1-thread-2,5,main] produce value: A39
Thread[pool-1-thread-1,5,main] poll value: A39
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A40
Thread[pool-1-thread-1,5,main] poll value: A40
Thread[pool-1-thread-2,5,main] produce value: A41
Thread[pool-1-thread-1,5,main] poll value: A41
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A42
Thread[pool-1-thread-1,5,main] poll value: A42
Thread[pool-1-thread-3,5,main] worker consume value: A40
Thread[pool-1-thread-3,5,main] worker consume value: A41
Thread[pool-1-thread-3,5,main] worker consume value: A42
Thread[pool-1-thread-3,5,main] worker consume value: A37
Thread[pool-1-thread-3,5,main] worker consume value: A36
Thread[pool-1-thread-3,5,main] worker consume value: A39
Thread[pool-1-thread-3,5,main] worker consume value: A38
Thread[pool-1-thread-3,5,main] worker consume value: A33
Thread[pool-1-thread-3,5,main] worker consume value: A32
Thread[pool-1-thread-3,5,main] worker consume value: A35
Thread[pool-1-thread-3,5,main] worker consume value: A34
Thread[pool-1-thread-2,5,main] produce value: A43
Thread[pool-1-thread-1,5,main] poll value: A43
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A44
Thread[pool-1-thread-1,5,main] poll value: A44
Thread[pool-1-thread-2,5,main] produce value: A45
Thread[pool-1-thread-1,5,main] poll value: A45
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A46
Thread[pool-1-thread-1,5,main] poll value: A46
Thread[pool-1-thread-2,5,main] produce value: A47
Thread[pool-1-thread-1,5,main] poll value: A47
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A48
Thread[pool-1-thread-1,5,main] poll value: A48
Thread[pool-1-thread-2,5,main] produce value: A49
Thread[pool-1-thread-1,5,main] poll value: A49
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A50
Thread[pool-1-thread-1,5,main] poll value: A50
Thread[pool-1-thread-2,5,main] produce value: A51
Thread[pool-1-thread-1,5,main] poll value: A51
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A52
Thread[pool-1-thread-1,5,main] poll value: A52
Thread[pool-1-thread-2,5,main] produce value: A53
Thread[pool-1-thread-1,5,main] poll value: A53
Thread[pool-1-thread-4,5,main] worker consume value: A45
Thread[pool-1-thread-4,5,main] worker consume value: A46
Thread[pool-1-thread-4,5,main] worker consume value: A43
Thread[pool-1-thread-4,5,main] worker consume value: A44
Thread[pool-1-thread-4,5,main] worker consume value: A49
Thread[pool-1-thread-4,5,main] worker consume value: A47
Thread[pool-1-thread-4,5,main] worker consume value: A48
Thread[pool-1-thread-4,5,main] worker consume value: A53
Thread[pool-1-thread-4,5,main] worker consume value: A52
Thread[pool-1-thread-4,5,main] worker consume value: A51
Thread[pool-1-thread-4,5,main] worker consume value: A50
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A54
Thread[pool-1-thread-1,5,main] poll value: A54
Thread[pool-1-thread-2,5,main] produce value: A55
Thread[pool-1-thread-1,5,main] poll value: A55
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A56
Thread[pool-1-thread-1,5,main] poll value: A56
Thread[pool-1-thread-2,5,main] produce value: A57
Thread[pool-1-thread-1,5,main] poll value: A57
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A58
Thread[pool-1-thread-1,5,main] poll value: A58
Thread[pool-1-thread-2,5,main] produce value: A59
Thread[pool-1-thread-1,5,main] poll value: A59
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A60
Thread[pool-1-thread-1,5,main] poll value: A60
Thread[pool-1-thread-2,5,main] produce value: A61
Thread[pool-1-thread-1,5,main] poll value: A61
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A62
Thread[pool-1-thread-1,5,main] poll value: A62
Thread[pool-1-thread-2,5,main] produce value: A63
Thread[pool-1-thread-1,5,main] poll value: A63
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A64
Thread[pool-1-thread-1,5,main] poll value: A64
Thread[pool-1-thread-5,5,main] worker consume value: A54
Thread[pool-1-thread-5,5,main] worker consume value: A55
Thread[pool-1-thread-5,5,main] worker consume value: A56
Thread[pool-1-thread-5,5,main] worker consume value: A57
Thread[pool-1-thread-5,5,main] worker consume value: A58
Thread[pool-1-thread-5,5,main] worker consume value: A59
Thread[pool-1-thread-5,5,main] worker consume value: A60
Thread[pool-1-thread-5,5,main] worker consume value: A62
Thread[pool-1-thread-5,5,main] worker consume value: A61
Thread[pool-1-thread-5,5,main] worker consume value: A64
Thread[pool-1-thread-5,5,main] worker consume value: A63
Thread[pool-1-thread-2,5,main] produce value: A65
Thread[pool-1-thread-1,5,main] poll value: A65
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A66
Thread[pool-1-thread-1,5,main] poll value: A66
Thread[pool-1-thread-2,5,main] produce value: A67
Thread[pool-1-thread-1,5,main] poll value: A67
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A68
Thread[pool-1-thread-1,5,main] poll value: A68
Thread[pool-1-thread-2,5,main] produce value: A69
Thread[pool-1-thread-1,5,main] poll value: A69
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A70
Thread[pool-1-thread-1,5,main] poll value: A70
Thread[pool-1-thread-2,5,main] produce value: A71
Thread[pool-1-thread-1,5,main] poll value: A71
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A72
Thread[pool-1-thread-1,5,main] poll value: A72
Thread[pool-1-thread-2,5,main] produce value: A73
Thread[pool-1-thread-1,5,main] poll value: A73
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A74
Thread[pool-1-thread-1,5,main] poll value: A74
Thread[pool-1-thread-2,5,main] produce value: A75
Thread[pool-1-thread-1,5,main] poll value: A75
Thread[pool-1-thread-3,5,main] worker consume value: A69
Thread[pool-1-thread-3,5,main] worker consume value: A67
Thread[pool-1-thread-3,5,main] worker consume value: A68
Thread[pool-1-thread-3,5,main] worker consume value: A65
Thread[pool-1-thread-3,5,main] worker consume value: A66
Thread[pool-1-thread-3,5,main] worker consume value: A75
Thread[pool-1-thread-3,5,main] worker consume value: A74
Thread[pool-1-thread-3,5,main] worker consume value: A73
Thread[pool-1-thread-3,5,main] worker consume value: A72
Thread[pool-1-thread-3,5,main] worker consume value: A71
Thread[pool-1-thread-3,5,main] worker consume value: A70
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A76
Thread[pool-1-thread-1,5,main] poll value: A76
Thread[pool-1-thread-2,5,main] produce value: A77
Thread[pool-1-thread-1,5,main] poll value: A77
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A78
Thread[pool-1-thread-1,5,main] poll value: A78
Thread[pool-1-thread-2,5,main] produce value: A79
Thread[pool-1-thread-1,5,main] poll value: A79
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A80
Thread[pool-1-thread-1,5,main] poll value: A80
Thread[pool-1-thread-2,5,main] produce value: A81
Thread[pool-1-thread-1,5,main] poll value: A81
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A82
Thread[pool-1-thread-1,5,main] poll value: A82
Thread[pool-1-thread-2,5,main] produce value: A83
Thread[pool-1-thread-1,5,main] poll value: A83
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A84
Thread[pool-1-thread-1,5,main] poll value: A84
Thread[pool-1-thread-2,5,main] produce value: A85
Thread[pool-1-thread-1,5,main] poll value: A85
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A86
Thread[pool-1-thread-1,5,main] poll value: A86
Thread[pool-1-thread-4,5,main] worker consume value: A76
Thread[pool-1-thread-4,5,main] worker consume value: A77
Thread[pool-1-thread-4,5,main] worker consume value: A78
Thread[pool-1-thread-4,5,main] worker consume value: A79
Thread[pool-1-thread-4,5,main] worker consume value: A84
Thread[pool-1-thread-4,5,main] worker consume value: A83
Thread[pool-1-thread-4,5,main] worker consume value: A86
Thread[pool-1-thread-4,5,main] worker consume value: A85
Thread[pool-1-thread-4,5,main] worker consume value: A80
Thread[pool-1-thread-4,5,main] worker consume value: A82
Thread[pool-1-thread-4,5,main] worker consume value: A81
Thread[pool-1-thread-2,5,main] produce value: A87
Thread[pool-1-thread-1,5,main] poll value: A87
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A88
Thread[pool-1-thread-1,5,main] poll value: A88
Thread[pool-1-thread-2,5,main] produce value: A89
Thread[pool-1-thread-1,5,main] poll value: A89
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A90
Thread[pool-1-thread-1,5,main] poll value: A90
Thread[pool-1-thread-2,5,main] produce value: A91
Thread[pool-1-thread-1,5,main] poll value: A91
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A92
Thread[pool-1-thread-1,5,main] poll value: A92
Thread[pool-1-thread-2,5,main] produce value: A93
Thread[pool-1-thread-1,5,main] poll value: A93
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A94
Thread[pool-1-thread-1,5,main] poll value: A94
Thread[pool-1-thread-2,5,main] produce value: A95
Thread[pool-1-thread-1,5,main] poll value: A95
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A96
Thread[pool-1-thread-1,5,main] poll value: A96
Thread[pool-1-thread-2,5,main] produce value: A97
Thread[pool-1-thread-1,5,main] poll value: A97
Thread[pool-1-thread-5,5,main] worker consume value: A90
Thread[pool-1-thread-5,5,main] worker consume value: A91
Thread[pool-1-thread-5,5,main] worker consume value: A92
Thread[pool-1-thread-5,5,main] worker consume value: A93
Thread[pool-1-thread-5,5,main] worker consume value: A94
Thread[pool-1-thread-5,5,main] worker consume value: A95
Thread[pool-1-thread-5,5,main] worker consume value: A96
Thread[pool-1-thread-5,5,main] worker consume value: A97
Thread[pool-1-thread-5,5,main] worker consume value: A88
Thread[pool-1-thread-5,5,main] worker consume value: A87
Thread[pool-1-thread-5,5,main] worker consume value: A89
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A98
Thread[pool-1-thread-1,5,main] poll value: A98
Thread[pool-1-thread-2,5,main] produce value: A99
Thread[pool-1-thread-1,5,main] poll value: A99
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A0
Thread[pool-1-thread-1,5,main] poll value: A0
Thread[pool-1-thread-2,5,main] produce value: A1
Thread[pool-1-thread-1,5,main] poll value: A1
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A2
Thread[pool-1-thread-1,5,main] poll value: A2
Thread[pool-1-thread-2,5,main] produce value: A3
Thread[pool-1-thread-1,5,main] poll value: A3
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A4
Thread[pool-1-thread-1,5,main] poll value: A4
Thread[pool-1-thread-2,5,main] produce value: A5
Thread[pool-1-thread-1,5,main] poll value: A5
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A6
Thread[pool-1-thread-1,5,main] poll value: A6
Thread[pool-1-thread-2,5,main] produce value: A7
Thread[pool-1-thread-1,5,main] poll value: A7
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A8
Thread[pool-1-thread-1,5,main] poll value: A8
Thread[pool-1-thread-3,5,main] worker consume value: A2
Thread[pool-1-thread-3,5,main] worker consume value: A1
Thread[pool-1-thread-3,5,main] worker consume value: A4
Thread[pool-1-thread-3,5,main] worker consume value: A3
Thread[pool-1-thread-3,5,main] worker consume value: A6
Thread[pool-1-thread-3,5,main] worker consume value: A5
Thread[pool-1-thread-3,5,main] worker consume value: A8
Thread[pool-1-thread-3,5,main] worker consume value: A7
Thread[pool-1-thread-3,5,main] worker consume value: A99
Thread[pool-1-thread-3,5,main] worker consume value: A98
Thread[pool-1-thread-3,5,main] worker consume value: A0
Thread[pool-1-thread-2,5,main] produce value: A9
Thread[pool-1-thread-1,5,main] poll value: A9
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A10
Thread[pool-1-thread-1,5,main] poll value: A10
Thread[pool-1-thread-2,5,main] produce value: A11
Thread[pool-1-thread-1,5,main] poll value: A11
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A12
Thread[pool-1-thread-1,5,main] poll value: A12
Thread[pool-1-thread-2,5,main] produce value: A13
Thread[pool-1-thread-1,5,main] poll value: A13
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A14
Thread[pool-1-thread-1,5,main] poll value: A14
Thread[pool-1-thread-2,5,main] produce value: A15
Thread[pool-1-thread-1,5,main] poll value: A15
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A16
Thread[pool-1-thread-1,5,main] poll value: A16
Thread[pool-1-thread-2,5,main] produce value: A17
Thread[pool-1-thread-1,5,main] poll value: A17
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A18
Thread[pool-1-thread-1,5,main] poll value: A18
Thread[pool-1-thread-2,5,main] produce value: A19
Thread[pool-1-thread-1,5,main] poll value: A19
Thread[pool-1-thread-4,5,main] worker consume value: A19
Thread[pool-1-thread-4,5,main] worker consume value: A18
Thread[pool-1-thread-4,5,main] worker consume value: A11
Thread[pool-1-thread-4,5,main] worker consume value: A10
Thread[pool-1-thread-4,5,main] worker consume value: A9
Thread[pool-1-thread-4,5,main] worker consume value: A13
Thread[pool-1-thread-4,5,main] worker consume value: A12
Thread[pool-1-thread-4,5,main] worker consume value: A15
Thread[pool-1-thread-4,5,main] worker consume value: A14
Thread[pool-1-thread-4,5,main] worker consume value: A17
Thread[pool-1-thread-4,5,main] worker consume value: A16
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A20
Thread[pool-1-thread-1,5,main] poll value: A20
Thread[pool-1-thread-2,5,main] produce value: A21
Thread[pool-1-thread-1,5,main] poll value: A21
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A22
Thread[pool-1-thread-1,5,main] poll value: A22
Thread[pool-1-thread-2,5,main] produce value: A23
Thread[pool-1-thread-1,5,main] poll value: A23
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A24
Thread[pool-1-thread-1,5,main] poll value: A24
Thread[pool-1-thread-2,5,main] produce value: A25
Thread[pool-1-thread-1,5,main] poll value: A25
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A26
Thread[pool-1-thread-1,5,main] poll value: A26
Thread[pool-1-thread-2,5,main] produce value: A27
Thread[pool-1-thread-1,5,main] poll value: A27
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A28
Thread[pool-1-thread-1,5,main] poll value: A28
Thread[pool-1-thread-2,5,main] produce value: A29
Thread[pool-1-thread-1,5,main] poll value: A29
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A30
Thread[pool-1-thread-1,5,main] poll value: A30
Thread[pool-1-thread-5,5,main] worker consume value: A30
Thread[pool-1-thread-5,5,main] worker consume value: A29
Thread[pool-1-thread-5,5,main] worker consume value: A20
Thread[pool-1-thread-5,5,main] worker consume value: A28
Thread[pool-1-thread-5,5,main] worker consume value: A27
Thread[pool-1-thread-5,5,main] worker consume value: A26
Thread[pool-1-thread-5,5,main] worker consume value: A25
Thread[pool-1-thread-5,5,main] worker consume value: A24
Thread[pool-1-thread-5,5,main] worker consume value: A23
Thread[pool-1-thread-5,5,main] worker consume value: A22
Thread[pool-1-thread-5,5,main] worker consume value: A21
Thread[pool-1-thread-2,5,main] produce value: A31
Thread[pool-1-thread-1,5,main] poll value: A31
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A32
Thread[pool-1-thread-1,5,main] poll value: A32
Thread[pool-1-thread-2,5,main] produce value: A33
Thread[pool-1-thread-1,5,main] poll value: A33
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A34
Thread[pool-1-thread-1,5,main] poll value: A34
Thread[pool-1-thread-2,5,main] produce value: A35
Thread[pool-1-thread-1,5,main] poll value: A35
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A36
Thread[pool-1-thread-1,5,main] poll value: A36
Thread[pool-1-thread-2,5,main] produce value: A37
Thread[pool-1-thread-1,5,main] poll value: A37
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A38
Thread[pool-1-thread-1,5,main] poll value: A38
Thread[pool-1-thread-2,5,main] produce value: A39
Thread[pool-1-thread-1,5,main] poll value: A39
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A40
Thread[pool-1-thread-1,5,main] poll value: A40
Thread[pool-1-thread-2,5,main] produce value: A41
Thread[pool-1-thread-1,5,main] poll value: A41
Thread[pool-1-thread-3,5,main] worker consume value: A40
Thread[pool-1-thread-3,5,main] worker consume value: A31
Thread[pool-1-thread-3,5,main] worker consume value: A41
Thread[pool-1-thread-3,5,main] worker consume value: A37
Thread[pool-1-thread-3,5,main] worker consume value: A36
Thread[pool-1-thread-3,5,main] worker consume value: A39
Thread[pool-1-thread-3,5,main] worker consume value: A38
Thread[pool-1-thread-3,5,main] worker consume value: A33
Thread[pool-1-thread-3,5,main] worker consume value: A32
Thread[pool-1-thread-3,5,main] worker consume value: A35
Thread[pool-1-thread-3,5,main] worker consume value: A34
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A42
Thread[pool-1-thread-1,5,main] poll value: A42
Thread[pool-1-thread-2,5,main] produce value: A43
Thread[pool-1-thread-1,5,main] poll value: A43
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A44
Thread[pool-1-thread-1,5,main] poll value: A44
Thread[pool-1-thread-2,5,main] produce value: A45
Thread[pool-1-thread-1,5,main] poll value: A45
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A46
Thread[pool-1-thread-1,5,main] poll value: A46
Thread[pool-1-thread-2,5,main] produce value: A47
Thread[pool-1-thread-1,5,main] poll value: A47
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A48
Thread[pool-1-thread-1,5,main] poll value: A48
Thread[pool-1-thread-2,5,main] produce value: A49
Thread[pool-1-thread-1,5,main] poll value: A49
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A50
Thread[pool-1-thread-1,5,main] poll value: A50
Thread[pool-1-thread-2,5,main] produce value: A51
Thread[pool-1-thread-1,5,main] poll value: A51
Thread[pool-1-thread-2,5,main] produce value: A52
Thread[pool-1-thread-1,5,main] poll value: A52
Thread[pool-1-thread-4,5,main] worker consume value: A45
Thread[pool-1-thread-4,5,main] worker consume value: A46
Thread[pool-1-thread-4,5,main] worker consume value: A43
Thread[pool-1-thread-4,5,main] worker consume value: A44
Thread[pool-1-thread-4,5,main] worker consume value: A42
Thread[pool-1-thread-4,5,main] worker consume value: A49
Thread[pool-1-thread-4,5,main] worker consume value: A47
Thread[pool-1-thread-4,5,main] worker consume value: A48
Thread[pool-1-thread-4,5,main] worker consume value: A52
Thread[pool-1-thread-4,5,main] worker consume value: A51
Thread[pool-1-thread-4,5,main] worker consume value: A50
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A53
Thread[pool-1-thread-1,5,main] poll value: A53
Thread[pool-1-thread-2,5,main] produce value: A54
Thread[pool-1-thread-1,5,main] poll value: A54
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A55
Thread[pool-1-thread-1,5,main] poll value: A55
Thread[pool-1-thread-2,5,main] produce value: A56
Thread[pool-1-thread-1,5,main] poll value: A56
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A57
Thread[pool-1-thread-1,5,main] poll value: A57
Thread[pool-1-thread-2,5,main] produce value: A58
Thread[pool-1-thread-1,5,main] poll value: A58
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A59
Thread[pool-1-thread-1,5,main] poll value: A59
Thread[pool-1-thread-2,5,main] produce value: A60
Thread[pool-1-thread-1,5,main] poll value: A60
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A61
Thread[pool-1-thread-1,5,main] poll value: A61
Thread[pool-1-thread-2,5,main] produce value: A62
Thread[pool-1-thread-1,5,main] poll value: A62
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A63
Thread[pool-1-thread-1,5,main] poll value: A63
Thread[pool-1-thread-5,5,main] worker consume value: A54
Thread[pool-1-thread-5,5,main] worker consume value: A55
Thread[pool-1-thread-5,5,main] worker consume value: A56
Thread[pool-1-thread-5,5,main] worker consume value: A57
Thread[pool-1-thread-5,5,main] worker consume value: A58
Thread[pool-1-thread-5,5,main] worker consume value: A59
Thread[pool-1-thread-5,5,main] worker consume value: A60
Thread[pool-1-thread-5,5,main] worker consume value: A62
Thread[pool-1-thread-5,5,main] worker consume value: A53
Thread[pool-1-thread-5,5,main] worker consume value: A61
Thread[pool-1-thread-5,5,main] worker consume value: A63
Thread[pool-1-thread-2,5,main] produce value: A64
Thread[pool-1-thread-1,5,main] poll value: A64
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A65
Thread[pool-1-thread-1,5,main] poll value: A65
Thread[pool-1-thread-2,5,main] produce value: A66
Thread[pool-1-thread-1,5,main] poll value: A66
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A67
Thread[pool-1-thread-1,5,main] poll value: A67
Thread[pool-1-thread-2,5,main] produce value: A68
Thread[pool-1-thread-1,5,main] poll value: A68
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A69
Thread[pool-1-thread-1,5,main] poll value: A69
Thread[pool-1-thread-2,5,main] produce value: A70
Thread[pool-1-thread-1,5,main] poll value: A70
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A71
Thread[pool-1-thread-1,5,main] poll value: A71
Thread[pool-1-thread-2,5,main] produce value: A72
Thread[pool-1-thread-1,5,main] poll value: A72
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A73
Thread[pool-1-thread-1,5,main] poll value: A73
Thread[pool-1-thread-2,5,main] produce value: A74
Thread[pool-1-thread-1,5,main] poll value: A74
Thread[pool-1-thread-3,5,main] worker consume value: A69
Thread[pool-1-thread-3,5,main] worker consume value: A67
Thread[pool-1-thread-3,5,main] worker consume value: A68
Thread[pool-1-thread-3,5,main] worker consume value: A65
Thread[pool-1-thread-3,5,main] worker consume value: A66
Thread[pool-1-thread-3,5,main] worker consume value: A74
Thread[pool-1-thread-3,5,main] worker consume value: A73
Thread[pool-1-thread-3,5,main] worker consume value: A72
Thread[pool-1-thread-3,5,main] worker consume value: A71
Thread[pool-1-thread-3,5,main] worker consume value: A70
Thread[pool-1-thread-3,5,main] worker consume value: A64
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A75
Thread[pool-1-thread-1,5,main] poll value: A75
Thread[pool-1-thread-2,5,main] produce value: A76
Thread[pool-1-thread-1,5,main] poll value: A76
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A77
Thread[pool-1-thread-1,5,main] poll value: A77
Thread[pool-1-thread-2,5,main] produce value: A78
Thread[pool-1-thread-1,5,main] poll value: A78
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A79
Thread[pool-1-thread-1,5,main] poll value: A79
Thread[pool-1-thread-2,5,main] produce value: A80
Thread[pool-1-thread-1,5,main] poll value: A80
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A81
Thread[pool-1-thread-1,5,main] poll value: A81
Thread[pool-1-thread-2,5,main] produce value: A82
Thread[pool-1-thread-1,5,main] poll value: A82
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A83
Thread[pool-1-thread-1,5,main] poll value: A83
Thread[pool-1-thread-2,5,main] produce value: A84
Thread[pool-1-thread-1,5,main] poll value: A84
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A85
Thread[pool-1-thread-1,5,main] poll value: A85
Thread[pool-1-thread-4,5,main] worker consume value: A76
Thread[pool-1-thread-4,5,main] worker consume value: A77
Thread[pool-1-thread-4,5,main] worker consume value: A78
Thread[pool-1-thread-4,5,main] worker consume value: A79
Thread[pool-1-thread-4,5,main] worker consume value: A84
Thread[pool-1-thread-4,5,main] worker consume value: A75
Thread[pool-1-thread-4,5,main] worker consume value: A83
Thread[pool-1-thread-4,5,main] worker consume value: A85
Thread[pool-1-thread-4,5,main] worker consume value: A80
Thread[pool-1-thread-4,5,main] worker consume value: A82
Thread[pool-1-thread-4,5,main] worker consume value: A81
Thread[pool-1-thread-2,5,main] produce value: A86
Thread[pool-1-thread-1,5,main] poll value: A86
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A87
Thread[pool-1-thread-1,5,main] poll value: A87
Thread[pool-1-thread-2,5,main] produce value: A88
Thread[pool-1-thread-1,5,main] poll value: A88
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A89
Thread[pool-1-thread-1,5,main] poll value: A89
Thread[pool-1-thread-2,5,main] produce value: A90
Thread[pool-1-thread-1,5,main] poll value: A90
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A91
Thread[pool-1-thread-1,5,main] poll value: A91
Thread[pool-1-thread-2,5,main] produce value: A92
Thread[pool-1-thread-1,5,main] poll value: A92
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A93
Thread[pool-1-thread-1,5,main] poll value: A93
Thread[pool-1-thread-2,5,main] produce value: A94
Thread[pool-1-thread-1,5,main] poll value: A94
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A95
Thread[pool-1-thread-1,5,main] poll value: A95
Thread[pool-1-thread-2,5,main] produce value: A96
Thread[pool-1-thread-1,5,main] poll value: A96
Thread[pool-1-thread-5,5,main] worker consume value: A90
Thread[pool-1-thread-5,5,main] worker consume value: A91
Thread[pool-1-thread-5,5,main] worker consume value: A92
Thread[pool-1-thread-5,5,main] worker consume value: A93
Thread[pool-1-thread-5,5,main] worker consume value: A94
Thread[pool-1-thread-5,5,main] worker consume value: A95
Thread[pool-1-thread-5,5,main] worker consume value: A96
Thread[pool-1-thread-5,5,main] worker consume value: A88
Thread[pool-1-thread-5,5,main] worker consume value: A87
Thread[pool-1-thread-5,5,main] worker consume value: A86
Thread[pool-1-thread-5,5,main] worker consume value: A89
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A97
Thread[pool-1-thread-1,5,main] poll value: A97
Thread[pool-1-thread-2,5,main] produce value: A98
Thread[pool-1-thread-1,5,main] poll value: A98
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A99
Thread[pool-1-thread-1,5,main] poll value: A99
Thread[pool-1-thread-2,5,main] produce value: A0
Thread[pool-1-thread-1,5,main] poll value: A0
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A1
Thread[pool-1-thread-1,5,main] poll value: A1
Thread[pool-1-thread-2,5,main] produce value: A2
Thread[pool-1-thread-1,5,main] poll value: A2
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A3
Thread[pool-1-thread-1,5,main] poll value: A3
Thread[pool-1-thread-2,5,main] produce value: A4
Thread[pool-1-thread-1,5,main] poll value: A4
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A5
Thread[pool-1-thread-1,5,main] poll value: A5
Thread[pool-1-thread-2,5,main] produce value: A6
Thread[pool-1-thread-1,5,main] poll value: A6
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A7
Thread[pool-1-thread-1,5,main] poll value: A7
Thread[pool-1-thread-3,5,main] worker consume value: A2
Thread[pool-1-thread-3,5,main] worker consume value: A1
Thread[pool-1-thread-3,5,main] worker consume value: A4
Thread[pool-1-thread-3,5,main] worker consume value: A3
Thread[pool-1-thread-3,5,main] worker consume value: A6
Thread[pool-1-thread-3,5,main] worker consume value: A5
Thread[pool-1-thread-3,5,main] worker consume value: A7
Thread[pool-1-thread-3,5,main] worker consume value: A97
Thread[pool-1-thread-3,5,main] worker consume value: A99
Thread[pool-1-thread-3,5,main] worker consume value: A98
Thread[pool-1-thread-3,5,main] worker consume value: A0
Thread[pool-1-thread-2,5,main] produce value: A8
Thread[pool-1-thread-1,5,main] poll value: A8
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A9
Thread[pool-1-thread-1,5,main] poll value: A9
Thread[pool-1-thread-2,5,main] produce value: A10
Thread[pool-1-thread-1,5,main] poll value: A10
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A11
Thread[pool-1-thread-1,5,main] poll value: A11
Thread[pool-1-thread-2,5,main] produce value: A12
Thread[pool-1-thread-1,5,main] poll value: A12
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A13
Thread[pool-1-thread-1,5,main] poll value: A13
Thread[pool-1-thread-2,5,main] produce value: A14
Thread[pool-1-thread-1,5,main] poll value: A14
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A15
Thread[pool-1-thread-1,5,main] poll value: A15
Thread[pool-1-thread-2,5,main] produce value: A16
Thread[pool-1-thread-1,5,main] poll value: A16
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A17
Thread[pool-1-thread-1,5,main] poll value: A17
Thread[pool-1-thread-2,5,main] produce value: A18
Thread[pool-1-thread-1,5,main] poll value: A18
Thread[pool-1-thread-4,5,main] worker consume value: A18
Thread[pool-1-thread-4,5,main] worker consume value: A8
Thread[pool-1-thread-4,5,main] worker consume value: A11
Thread[pool-1-thread-4,5,main] worker consume value: A10
Thread[pool-1-thread-4,5,main] worker consume value: A9
Thread[pool-1-thread-4,5,main] worker consume value: A13
Thread[pool-1-thread-4,5,main] worker consume value: A12
Thread[pool-1-thread-4,5,main] worker consume value: A15
Thread[pool-1-thread-4,5,main] worker consume value: A14
Thread[pool-1-thread-4,5,main] worker consume value: A17
Thread[pool-1-thread-4,5,main] worker consume value: A16
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A19
Thread[pool-1-thread-1,5,main] poll value: A19
Thread[pool-1-thread-2,5,main] produce value: A20
Thread[pool-1-thread-1,5,main] poll value: A20
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A21
Thread[pool-1-thread-1,5,main] poll value: A21
Thread[pool-1-thread-2,5,main] produce value: A22
Thread[pool-1-thread-1,5,main] poll value: A22
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A23
Thread[pool-1-thread-1,5,main] poll value: A23
Thread[pool-1-thread-2,5,main] produce value: A24
Thread[pool-1-thread-1,5,main] poll value: A24
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A25
Thread[pool-1-thread-1,5,main] poll value: A25
Thread[pool-1-thread-2,5,main] produce value: A26
Thread[pool-1-thread-1,5,main] poll value: A26
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A27
Thread[pool-1-thread-1,5,main] poll value: A27
Thread[pool-1-thread-2,5,main] produce value: A28
Thread[pool-1-thread-1,5,main] poll value: A28
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A29
Thread[pool-1-thread-1,5,main] poll value: A29
Thread[pool-1-thread-5,5,main] worker consume value: A19
Thread[pool-1-thread-5,5,main] worker consume value: A29
Thread[pool-1-thread-5,5,main] worker consume value: A20
Thread[pool-1-thread-5,5,main] worker consume value: A28
Thread[pool-1-thread-5,5,main] worker consume value: A27
Thread[pool-1-thread-5,5,main] worker consume value: A26
Thread[pool-1-thread-5,5,main] worker consume value: A25
Thread[pool-1-thread-5,5,main] worker consume value: A24
Thread[pool-1-thread-5,5,main] worker consume value: A23
Thread[pool-1-thread-5,5,main] worker consume value: A22
Thread[pool-1-thread-5,5,main] worker consume value: A21
Thread[pool-1-thread-2,5,main] produce value: A30
Thread[pool-1-thread-1,5,main] poll value: A30
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A31
Thread[pool-1-thread-1,5,main] poll value: A31
Thread[pool-1-thread-2,5,main] produce value: A32
Thread[pool-1-thread-1,5,main] poll value: A32
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A33
Thread[pool-1-thread-1,5,main] poll value: A33
Thread[pool-1-thread-2,5,main] produce value: A34
Thread[pool-1-thread-1,5,main] poll value: A34
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A35
Thread[pool-1-thread-1,5,main] poll value: A35
Thread[pool-1-thread-2,5,main] produce value: A36
Thread[pool-1-thread-1,5,main] poll value: A36
Thread[main,5,main] current size: 0
Thread[pool-1-thread-2,5,main] produce value: A37
Thread[pool-1-thread-1,5,main] poll value: A37
Thread[pool-1-thread-2,5,main] produce value: A38
Thread[pool-1-thread-1,5,main] poll value: A38
Thread[main,5,main] current size: 0

 

时间: 2024-08-02 01:55:07

生产都消费者模式的一个demo,消费者设置缓存的相关文章

java 多线程生产者和消费者模式,怎么实现边生产边消费?

问题描述 java 多线程生产者和消费者模式,怎么实现边生产边消费? 如何使用java语言开发处理一批数据,使处理时间变快,而又不遗漏数据呢?? 解决方案 看瓶颈在哪里,如果是cpu.io的开销,性能不可能无限提高.如果存在网络延迟等,可以用多线程隐藏延迟,达到提高性能的目的. 解决方案二: 你说的什么叫边生产边消费呢?生产者消费者设计实现设计中生产者把数据放入队列,消费者从队列中获取数据处理,消除了生产者和消费者之间的代码依赖.该模式将生产数据的过程与使用数据的过程解耦,简化了由于这两个过程不

聊聊并发:生产者消费者模式

在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据.同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者.为了解决这个问题于是引入了生产者和消费者模式. 什么是生产者消费者模式 生产者

聊聊并发(十)生产者消费者模式

本文首发于InfoQ   作者:方腾飞  校对:张龙 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据.同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者.为了解决这种生产消费能力

用Python多线程实现生产者消费者模式

什么是生产者消费者模式 在软件开发的过程中,经常碰到这样的场景: 某些模块负责生产数据,这些数据由其他模块来负责处理(此处的模块可能是:函数.线程.进程等).产生数据的模块称为生产者,而处理数据的模块称为消费者.在生产者与消费者之间的缓冲区称之为仓库.生产者负责往仓库运输商品,而消费者负责从仓库里取出商品,这就构成了生产者消费者模式. 结构图如下: 为了大家容易理解,我们举一个寄信的例子.假设你要寄一封信,大致过程如下: 你把信写好--相当于生产者生产数据 你把信放入邮箱--相当于生产者把数据放

生产者消费者模式浅析

        原文地址:http://blog.csdn.net/lenyusun/article/details/6609786         由于最近工作中,涉及到生产者消费者设计模式,对此有一些体会,所以总结一下,与大家分享.         什么是生产者消费者模式?         在工作中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的模块,就称为

Lock、Condition实现简单的生产者消费者模式示例_java

复制代码 代码如下: package condition; import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock; /** * 利用Lock.Condition实现生产者消费者模式 * @aut

python 多线程笔记(5)-- 生产者/消费者模式

  我们已经知道,对公共资源进行互斥访问,可以使用Lock上锁,或者使用RLock去重入锁.   但是这些都只是方便于处理简单的同步现象,我们甚至还不能很合理的去解决使用Lock锁带来的死锁问题. 要解决更复杂的同步问题,就必须考虑别的办法了.   threading提供的Condition对象提供了对复杂线程同步问题的支持. Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法.   使用Condition的主要方式

leizi求指教-生产者消费者模式在什么情况下用到?

问题描述 生产者消费者模式在什么情况下用到? 生产者消费者通常都用来解决哪类问题?什么情况下需要想到用到生产者消费者模式呢? 解决方案 一般就是任务队列的时候,比如你有专门处理的任务的线程,同时有生成任务的线程,这样为了好控制,一般是把任务通过队列的方式来传递这样可以有多个线程做生产者,它们只需要把任务不停的丢入队列,同样很多线程做消费者,它们不停的从队列中取任务执行

Qt之线程同步(生产者消费者模式 - QWaitCondition)

简述 生产者将数据写入缓冲区,直到它到达缓冲区的末尾,这时,它从开始位置重新启动,覆盖现有数据.消费者线程读取数据并将其写入标准错误. Wait condition(等待条件)比单独使用 mutex(互斥量)有一个更高级的并发性,如果缓冲区的访问由一个 QMutex 把守,当生产者线程访问缓冲区时,消费者线程将无法访问.然而,两个线程同时访问不同的缓冲区是没有害处的. 示例包含两个类:Producer 和 Consumer,均继承自 QThread.循环缓冲区用于两个类之间的沟通,同步工具用于保