[code="java"]
private BlockingQueue queue = new LinkedBlockingQueue();
private ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 50, 10, TimeUnit.SECONDS, queue);
[/code]
请问大婶们,queue.add() 与 executor.execute() 区别,源码实在看的头晕@@
[code="java"]
private BlockingQueue queue = new LinkedBlockingQueue();
private ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 50, 10, TimeUnit.SECONDS, queue);
[/code]
请问大婶们,queue.add() 与 executor.execute() 区别,源码实在看的头晕@@
[quote]queue.add() 与 executor.execute() 区别[/quote]
这个...关公战秦琼吗?
queue就是个阻塞队列,add方法是往里面塞东西,不成功抛异常。
通常会用push,和add的区别是不成功则等待。
executor是任务执行器,execute是执行个任务(Runnable接口)的。内部会新建个线程或重用个线程等方式来执行这个任务。
通常推荐用ExecutorService的submit方法来拿结果处理异常等。
这两个东西没多大关系,谈区别也只能说:“它们是两种不同的东西?!”
另外,ThreadPoolExecutor 这个类属于底层实现类,实际使用过程中推荐用Executors这个工厂类来获得实例,不推荐直接使用。
当然如果你是学习目的,那就可以无视推荐了。
关于CPU,理想效果是所有CPU都干活(如果这台机器专门跑这个程序的话)。
但貌似不同系统,线程和系统进程之间的关系比较复杂,可能只能调调试试了吧。
最大值应该是不要超过实际CPU数量来着...