Java常用高级线程操作(2)

作为屏障的描述:是一个节点,这个节点是一个会和点,所有操作执行完毕之后都会转到此位置,也就是说所有已经完成任务的线程都要等到其他线程完成,者有点像守护线程的概念。CyclicBarrier实现了屏障,它的构造方法指定一个数字和一个Runnable对象,数字是它调度指挥的线程的数目,Runnable是所有线程都结束之后CyclicBarrier执行的操作,

这个可以解决并行的一些算法运算,那个Runnable就是用来合并结果的(使用分治法思想)。

7.Callable,Future接口

这两个对象都是能够返回县城运行结果的,Callable是被ExecutorService来执行的,Service的submit返回一个Future对象,可以使用它的get方法返回Callable 的运行结果,但是注意只有线程运行完毕之后Future才能有值可以返回

FutureTask是一个既实现Runnable又实现了Future接口的对象,既可以用他的run方法,又可以被submit

8.Executors

这个类的一系列的静态方法来创建线程池并返回ExecutorService对象,newFixedThreadPoll是创建固定大小的线程池,newCacheThreadPool是创建60s之后自动销毁的线程池,这个方便了在小段时间时线程数变化比较大的时候可以节省时间和内存。

newSingleThreadExecutor是创建 一个可以重用的线程。

newScheduledThreadPool创建一个指定大小的线程池,不同的是这个线程池执行线程的操作时按照时序来的,可以指定延迟和次数,可以通过返回的ScheduledExecutorService对象的scheduleAtFixedRate指定一个runnable还有其首次执行的延迟和之后两次调用之间的延迟

9.ForkJoinPool和ForkJoinTask

这两个也是一个用来创建线程池的方法,但是不同的是它们执行的线程可以被合并结果,但是他们执行的任务对象就使用其抽象子类,ForkJoinTask的实现抽象子类:RecursiveTask和RecursiveAction。

前者是可以返回结果,后者是无法返回结果的。计算要实现在compare实现的方法中。执行任务之后可以调用ForkJoinPool的invoke方法来提交一个任务,还有一个名为invokeAll()的方法,但是这个方法如何使用我还不是很了解,因为这个All方法调用的 参数是一个Callable对象集合而非ForkJoinTask。

10.线程安全的随机数生成ThreadLocalRandom类

一般情况下使用它的静态方法就可以生成,比如:
ThreadLocalRandom.current().nextLong(100);

生成的是以0为下限和100的上限的随机数。

这个应当是一个线程安全的随机数生辰器,因此可以考虑在并行运算中使用它。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f7c86c26ec80f83fe10a643996e2ba81.html