java 多线程
文章平均质量分 95
hy飞无
这个作者很懒,什么都没留下…
展开
-
java多线程的创建
并发:一段时间内处理多个任务。多个任务在同一时间内切换。并行:同一时间处理多个任务。在java语言里提供了2种方式创建线程:1.继承Thread类,覆盖run()方法2.创建一个实现Runnable接口的类。使用带参数的Thread构造器来创建Thread对象。注意开启线程要调用start()的方法,如果调用了run()方法并不是开启线程,只是执行了thread对象实例...原创 2018-07-26 13:58:45 · 174 阅读 · 0 评论 -
java中线程fork join
1. 什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+。。...转载 2018-07-31 15:14:49 · 162 阅读 · 0 评论 -
java中原子变量
当一个线程在对原子变量操作时,如果其他线程也试图对同一原子变量执行操作,原子变量的实现类提供了一套机制来检查操作是否在一步内完成。一般来说,这个操作先获取变量值,然后在本地改变变量的值,然后试图用这个改变的值去替换之前的值。如果之前的值没有被其他线程改变,就可以执行这个替换操作,否则方法将在执行这个操作。这种操作称为cas原子操作。原子变量不使用锁或其他同步机制来保护对其值的并发访问。所有操作...转载 2018-07-31 13:44:38 · 3510 阅读 · 0 评论 -
java线程中ScheduledThreadPoolExecutor
当发送一个任务给执行器时,根据执行器的相应配置,任务将尽可能快的被执行,但是,如果并不想让任务马上被执行,而是想让任务在过一段时间被执行,或者任务能够被周期性的执行。为了达到这个目的,执行器框架提供了ScheduledThreadPoolExecutor类。 executor.schedule(command, delay, unit) command :runnable ...原创 2018-07-31 11:30:16 · 433 阅读 · 0 评论 -
java中并发集合
阻塞式集合:这类集合包括添加和移除的数据方法。当集合已满或为空时,被调用的添加或者移除方法就不能立即被执行,那么调用这个方法的线程将被阻塞,一直到该方法可以被成功执行。非阻塞式集合:这类集合也包括添加和移除的方法,如果方法不能立即被执行,则返回null或抛出异常,但是调用这个方法的线程不会被阻塞。非阻塞集合: ConcurrentLinkedQueue:基于链接节点的无限...原创 2018-07-31 11:29:31 · 1489 阅读 · 0 评论 -
java线程中Exchanger
Exchanger类是一个同步辅助类,允许在并发任务之间交换数据。具体来说,Exchanger类允许在2个线程之间定义同步点。当2个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,同时第二个线程的数据结构进入到第一个线程中。代码: import java.util.ArrayList;import java.util.Arrays;import j...原创 2018-07-27 16:00:56 · 125 阅读 · 0 评论 -
java线程中Phaser
Phaser: 是一个同步辅助类,他允许执行并发多阶段任务。当我们有并发任务并且需要分解成几步执行时,这种机制就非常适用,Phaser类机制是在每一步结束的位置对线程进行同步,当所有的线程都完成了这一步,才允许执行下一步。更其他同步工具一样,必须对Phaser类中参与同步操作的让无数进行初始化,不同的是,我们可以动态地增加或减少任务数量。列子: import java.util....原创 2018-07-27 15:29:05 · 205 阅读 · 0 评论 -
java中CyclicBarrier
CyclicBarrier:是一个同步辅助类。它允许2个或多个线程在某个点上进行同步。这个类和CountDownLatch类型,但也有不同之处,使之成为更强大的类。CyclicBarrier类使用一个整数型进行初始化,这个数是需要在某个点上同步的线程数。当一个线程到达指定的点后,它将调用await()方法等待其他的线程。当线程调用await()方法后,CyclicBarrier类将阻塞这个线程...原创 2018-07-27 13:15:31 · 197 阅读 · 0 评论 -
java中CountDownLatch
CountDownLatch:它是一个辅助类,在完成一组正在其他线程执行的操作之前,它允许线程一直等待。这个类使用一个整数进行初始化,这个线程就是等待完成的操作的数目。当一个线程要等待某些操作先执行完成时,需要调用await()方法,这个方法让线程进入到休眠直到等待的所有操作都完成,当某一个操作完成后,它将调用countDown()方法将CountDownLatch类的内部计数器减1,当计数器变成...原创 2018-07-27 10:28:06 · 105 阅读 · 0 评论 -
java中Semapore的使用
Semaphore:信号量是一种计数器,用来保护一个或者多个共享资源的访问。如果线程要访问一个共享资源,它必须先获得信号量。如果信号量的内部计数器大于0,信号量将减1,然后允许访问这个共享资源。计数器大于0意味着有可以使用的资源,因此线程将被允许使用其中的一个资源。否则,如果信号量的计数器等于0,信号量将会把线程置入休眠直至计数器大于0.计数器等于0的时候意味着所有的共享资源已经被其...原创 2018-07-27 09:52:16 · 356 阅读 · 0 评论 -
java线程中CompletionService
通常情况下,使用执行器来执行并发任务时,将Runnable或Callable任务发送给执行器,Future对象来控制任务。此外,还会碰到如下情形,需要在一个对象里发送任务给执行器,然后在另一个对象里处理结果。对于这种情况java提供了CompletionService类。CompletionService类有一个方法用来发送任务给执行器,还有一个任务为下一个已经执行结束的任务获取Future对...原创 2018-07-30 14:24:39 · 212 阅读 · 0 评论 -
java线程中Future
如果在执行线程时,想得到线程的返回值可以使用Future。如果只是一个线程,那么没有必要使用。Callable:这个接口声明了call()方法。可以再这个方法里实现任务的具体逻辑操作。Callable接口是一个泛型接口,这就意味着必须声明call()方法返回的数据类型。Future:这个接口声明了一些方法来获取Callbale对象产生的结果,并管理他们的状态。FutureTask:这个...原创 2018-07-30 11:09:47 · 461 阅读 · 0 评论 -
java线程的休眠和回复
sleep()方法:表示放弃当前cpu的资源,使当前线程不占用计算机的任何资源。如果当前线程获取到了锁,sleep()方法是不会放弃锁的,如果线程被打断会抛出InterruptException异常。join()方法:当一个线程对接的join的方法被调用时,调用他的线程会被挂起,直到这个线程对象完成它的任务。代码:public class Test3 { public st...原创 2018-07-26 16:34:41 · 290 阅读 · 0 评论 -
java中线程同步基础
临界区:临界区是一个用以访问访问共享资源的代码块,这个代码块在同一时间内只允许一个线程执行。重入锁:当末个线程请求一个由其他线程持有的锁时,发出的请求的线程就会阻塞,然而内置锁(synchronized)是可重入的,因此如果末个线程试图获得一个已经由他自己持有的锁,那么这个请求就会成功。synchronized 和 ReentrantLock 都是重入锁。public class T...原创 2018-07-26 15:31:01 · 186 阅读 · 0 评论 -
java中线程的异常处理
当线程抛出一个未捕获到的异常时,jvm将为异常寻找以下三种可能的处理器。首先,它查找线程对象的未捕获异常处理器,如果找不到,jvm继续查找线程对象所在的线程组的未捕获异常处理器,如果还是找不到,会继续查找默认的未捕获异常处理器。如果没有一个异常处理器在,jvm会把堆栈异常记录打印到控制台,并退出程序。public class ThreadCatchException implemen...原创 2018-07-26 14:38:52 · 243 阅读 · 0 评论 -
java中线程执行器基本知识
ThreadPoolExecutor: new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);corePoolSize:除非设置了allowCoreThreadTimeOut,否则即使它们处于空闲状态,也要保留在池中的线程数。maximumPoolSize:池中允许的最大...原创 2018-07-27 17:39:15 · 357 阅读 · 0 评论