多线程
文章平均质量分 79
小码农的了解
乘风破BUG
别crud了
展开
-
FutureTask
简介 在Executors框架体系中,FutureTask用来表示表示可获取结果的异步任务。FutureTask实现了Future接口,FutureTask提供了启动和取消异步任务,查询异步任务是否计算结束以及获取最终的异步任务的结果的一些常用方法。通过get()方法来获取异步任务的结果,但是会阻塞当前线程直至异步任务执行结束。一旦任务执行结束,任务不能重启或取消,除非调用runAndReset()方法。在FutureTask的源码中为其定义了这些状态; FutureTask.run()方法的执行的时机,原创 2021-01-04 16:35:35 · 273 阅读 · 0 评论 -
并发工具之CountDownLatch与CyclicBarrier
文章目录倒计时器CountDownLatch循环栅栏CyclicBarrierCountDownLatch与CyclicBarrier的比较 倒计时器CountDownLatch 在多线程协作完成业务功能时,有时需要等待其他多个线程完成任务之后,主线程才能往下继续执行业务功能,在这种业务场景下,通常可以使用Thread类的join方法,让主线程等待被join的线程执行完成之后,主线程才能继续往下执行,当然,使用线程间消息通信机制也可以完成。其实,Java并发工具类中为我们提供了类似倒计时这样的工具类。 举个原创 2021-01-04 16:09:15 · 217 阅读 · 0 评论 -
线程之间的数据共享
Java里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点:可见性和有序性以及原子性。 Java内存模型(JMM)解决了可见性和有序性的问题,而锁解决了原子性的问题,理想情况下我们希望做到“同步”和“互斥”。有以下常规实现放: 将数据抽象成为一个类 将数据抽象成一个类,并将对这个数据的操作作为这个类的方法,这么设计可以很容易做到同步,只要在方法上加”synchronized。 Runnable对象作为一个类的内部类 将 Runnable 对象作为一个类的内部类,共享数据作为这个类的成原创 2021-01-04 15:10:36 · 750 阅读 · 0 评论 -
线程池的原理及使用
文章目录线程池的原理线程复用线程池的组成拒绝策略java线程池的工作过程合理的使用线程池newCachedThreadPoolnewFixedThreadPoolnewScheduledThreadPoolnewSingleThreadExecutor使用ThreadFactoryBuilder类来创建线程工厂 线程池的原理 作用:线程复用,控制最大并发数,管理线程。线程池做的工作是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超过数量的线程排队等候原创 2020-12-23 15:04:22 · 523 阅读 · 0 评论 -
线程与进程的调度算法
文章目录理解线程的上下文上下文切换实现过程引起线程上文切换的原因线程调度算法抢占式调度协同式调度jvm的线程调度线程让出CPU的情况进程调度算法优先调度算法高优先权优先调度算法高响应比优先调度算法基于时间片的轮转调度算法多级反馈队列调度算法 理解线程的上下文 对于单核 CPU 来说(对于多核 CPU,此处就理解为一个核),CPU 在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫做线程上下文切换(对于进程也是类似)。 上下文切换实现过程 挂起一个进程,将这个进程在cpu中的状原创 2020-12-23 12:02:06 · 930 阅读 · 0 评论 -
线程的生命周期与常用方法
文章目录线程的生命周期线程的常用方法其他线程方法什么是守护线程 线程的生命周期 一个线程不是被创建了马上就开始执行,也不是一直处于执行状态。在线程的整个生命周期中会经历新建(NEW),就绪(Runnable),阻塞(Blocked)和销魂(Thrminated)5种状态。 就绪 当线程对象调用start()方法之后,该线程处于就绪状态。JVM会为其创建方法调用栈和程序计数器,等待调度运行。 运行 如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态。 阻塞 阻塞状原创 2020-12-22 21:40:12 · 297 阅读 · 0 评论 -
线程的创建与终止
文章目录线程的三种创建方式线程的终止方式总结 线程的三种创建方式 /*使用extends Thread方式*/ class MyThread extends Thread { @Override public void run() { for (int i = 0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"--"+i); } } } My原创 2020-12-22 20:23:27 · 358 阅读 · 0 评论