JAVA并发分工原则

来源:互联网 发布:ios中多线程编程 编辑:程序博客网 时间:2024/05/18 02:03

书上研究了两类应用程序:


一类是IO密集型的:书上指出IO密集型的应用程序的阻塞系数很大(因此执行任务时候阻塞的时间往往很大,因此可以创建更多的线程),合理创建线程的数量为:

线程数 = CPU / (1 - 阻塞系数)    CPU的核数可以通过Runtime.getRuntime().availableProcessor()来获取。


第二类是计算密集型的:书上指出计算密集型的应用程序的阻塞系数为零,因此,创建的线程数最好是CPU的核数(不多不少最好),少了CPU有的处于空闲状态,多了因切换频繁耗费时间。


创建线程用Callable泛型接口与ExecutorSerivce接口搭配,并通过Future<V>来获得得到执行结果。

Callable<V>需要重写call方法,call方法有返回值,不像Runnable接口的run方法没有返回值,然后通过ExecutorService 中的方法(submit、invokeAll)调度任务开启线程,其返回的是List<Future<V>>,注意Future的泛型必须与Callable的泛型一样。

0 0
原创粉丝点击