JAVA多线程
JAVA多线程相关文章
_否极泰来_
人是有命运的,文化属性和作用在不同人身上的自然规律决定了命和运,改变客观条件,才能改变命运。你是你自己的救世主!——遥远的救世主
展开
-
JAVA多线程(二十八)Java多线程之SynchronousQueue容器
1.JAVA多线程(二十八)Java多线程之SynchronousQueue容器1.1 什么是SynchronousQueue Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。不像ArrayBlockingQueue或LinkedListBlocking...原创 2020-02-11 18:50:01 · 415 阅读 · 0 评论 -
JAVA多线程(二十七)Java多线程之LinkedBlockingQueue容器
1.JAVA多线程(二十七)Java多线程之LinkedBlockingQueue容器1.1 什么是LinkedBlockingQueue LinkedBlockingQueue 底层基于单向链表实现的阻塞队列,可以当做无界队列也可以当做有界队列来使用,同样满足 FIFO 的特性,与 ArrayBlockingQueue 相比起来具有更高的吞吐量,为了防止 LinkedBlockingQue...原创 2020-02-11 18:48:46 · 791 阅读 · 0 评论 -
JAVA多线程(二十六)Java多线程之PriorityBlockingQueue容器
1.JAVA多线程(二十六)Java多线程之PriorityBlockingQueue容器1.1 什么是PriorityBlockingQueue PriorityBlockingQueue 是一个支持优先级的无界阻塞队列。默认情况下元素采用自然顺序进行排序,也可以通过自定义类实现 compareTo() 方法来指定元素排序规则,或者初始化时通过构造器参数 Comparator 来指定排序规...原创 2020-02-11 18:47:55 · 331 阅读 · 0 评论 -
JAVA多线程(二十五)Java多线程之ArrayBlockingQueue容器
1.JAVA多线程(二十五)Java多线程之ArrayBlockingQueue容器1.1 什么是BlockingQueue 阻塞队列(BlockingQueue)被广泛使用在“生产者-消费者”问题中,其原因是 BlockingQueue 提供了可阻塞的插入和移除的方法。当队列容器已满,生产者线程会被阻塞,直到队列未满;当队列容器为空时,消费者线程会被阻塞,直至队列非空时为止。Blocki...原创 2020-02-11 18:46:51 · 530 阅读 · 0 评论 -
JAVA多线程(二十四)Java多线程之CompletableFuture类
1.JAVA多线程(二十四)Java多线程之CompletableFuture类1.1 什么是Future Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel方法停止任务的执行。package com.yuanxw.chapter24;import ja...原创 2020-02-06 19:40:15 · 889 阅读 · 0 评论 -
JAVA多线程(二十三)Java多线程之ScheduledThreadPoolExecutor定时执行任务线程池
1.JAVA多线程(二十三)Java多线程之ScheduledThreadPoolExecutor定时执行任务线程池1.1 定时执行任务线程池ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor是一个使用线程池执行定时任务的类,相较于Java中提供的另一个执行定时任务的类Timer,其主要有如下两个优点:使用多线程执行任务,不用...原创 2020-02-03 21:39:05 · 1142 阅读 · 0 评论 -
JAVA多线程(二十二)Java多线程之WorkStealingPool工作窃取线程池
1.JAVA多线程(二十二)Java多线程之WorkStealingPool工作窃取线程池1.1 工作窃取线程池WorkStealingPool 在Java 8中,引入了一种新型的线程池,作为newWorkStealingPool()来补充现有的线程池。WorkStealingPool线程池,来维持相应的并行级别,它会通过工作窃取的方式,使得多核的 CPU 不会闲置,总会有活着的线程让 C...原创 2020-02-03 21:37:30 · 4148 阅读 · 2 评论 -
JAVA多线程(二十一)Java多线程之SingleThreadExecutor单线程化线程池
1.JAVA多线程(二十一)Java多线程之SingleThreadExecutor单线程化线程池1.1 单线程化线程池SingleThreadExecutor SingleThreadExecutor 是只有一个线程的线程池。通过源代码查看SingleThreadExecutor实现: /** * Creates an Executor that uses a sing...原创 2020-02-01 18:56:59 · 1189 阅读 · 0 评论 -
JAVA多线程(二十)Java多线程之FixedThreadPool可重用固定线程数的线程池
1.JAVA多线程(二十)Java多线程之FixedThreadPool可重用固定线程数的线程池1.1 可重用固定线程数的线程池FixedThreadPool 可重用固定线程数的线程池FixedThreadPool特点是:只有核心线程,不会被回收、线程数量固定、任务队列无大小限制(超出的线程任务会在队列中等待),通过源代码查看FixedThreadPool实现: /** ...原创 2020-02-01 18:56:29 · 1142 阅读 · 0 评论 -
JAVA多线程(十九)Java多线程之CachedThreadPool可缓存线程池
1.JAVA多线程(十九)Java多线程之CachedThreadPool可缓存线程池1.1 可缓存线程池CachedThreadPool 可缓存线程池CachedThreadPool是一个根据需要创建新线程的线程池。通过源代码查看CachedThreadPool实现: /** * Creates a thread pool that creates new threa...原创 2020-02-01 18:55:46 · 1239 阅读 · 0 评论 -
JAVA多线程(十八)Java多线程之Executor框架&ThreadPoolExecutor类
1.JAVA多线程(十八)Java多线程之Executor框架&ThreadPoolExecutor类 Executor 框架是 Java5 之后引进的,在 Java 5 之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。this 逃逸是指在构...原创 2020-01-31 18:31:14 · 404 阅读 · 0 评论 -
JAVA多线程(十七)Java多线程之ForkJoin框架
1.JAVA多线程(十七)Java多线程之ForkJoin框架1.1 什么是ForkJoin框架? Fork/Join 框架,可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。通过这种方式,Fork/Join 能试着去使用所有可用的处理器,以达到加速处理多线程的目的。本文中对Fork/Join框架的讲解,基于JDK1.8+中的Fork/Joi...原创 2020-01-30 15:41:07 · 469 阅读 · 0 评论 -
JAVA多线程(十六)Java多线程之Condition对象
1.JAVA多线程(十六)Java多线程之Condition对象1.1 什么是Condition? Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较...原创 2020-01-29 14:51:36 · 271 阅读 · 0 评论 -
JAVA多线程(十五)Java多线程之ReentrantLock重入锁
1.JAVA多线程(十五)Java多线程之ReentrantLock重入锁1.1 什么是ReentrantLock重入锁? 重入锁:自己可以再次获取自己的内部锁。比如一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死锁。同一个线程每次获取锁,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。1...原创 2020-01-27 18:51:52 · 218 阅读 · 0 评论 -
JAVA多线程(十四)Java多线程之Semaphore信号量
1.JAVA多线程(十四)Java多线程之Semaphore信号量 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。把它比作是控制流量的红绿灯,比如一条马路要限制流量,只允许同时有一百辆车在这条路上行使,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马路,后面的车会看到红灯,不能驶入马路,但是如果前一百辆中有五辆...原创 2020-01-16 00:35:10 · 693 阅读 · 0 评论 -
JAVA多线程(十三)Java多线程之CyclicBarrier
1.JAVA多线程(十三)Java多线程之CyclicBarrier CyclicBarrier 和 CountDownLatch 非常类似,它也可以实现线程间的技术等待,但是它的功能比 CountDownLatch 更加复杂和强大。主要应用场景和 CountDownLatch 类似。1.1 CyclicBarrier类 CyclicBarrier是java.util.concur...原创 2020-01-15 18:37:37 · 325 阅读 · 0 评论 -
JAVA多线程(十二)Java多线程之CountDownLatch
1.JAVA多线程(十一)Java多线程之CountDownLatch1.1 CountDownLatch是什么? CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashM...原创 2020-01-15 17:09:28 · 345 阅读 · 0 评论 -
JAVA多线程(十一)Java多线程之自定义线程池
1.JAVA多线程(十一)Java多线程之自定义线程池1.1 什么是用线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保...原创 2020-01-15 12:03:18 · 348 阅读 · 0 评论 -
JAVA多线程(十)Java多线程之ThreadLocal
1.JAVA多线程(十)Java多线程之ThreadLocal1.1 ThreadLocal类 ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。...原创 2020-01-15 11:51:00 · 179 阅读 · 0 评论 -
JAVA多线程(九)Java多线程之生产者与消费者
1.JAVA多线程(九)Java多线程之生产者与消费者需求如下:自定义多线程生产者与消费者1.如果生产者没有生产消息,就需要去生产消息,消费者就需要等待消费者生产完以后再去消费。2.如果消费者没有消费消息,那么生产者就需要等待,消费都消费完成后,再去生产消息。1.1 生产者与消费者【一个生产线程和一个消费者线程】package com.yuanxw.chapter9;/** * ...原创 2019-12-31 00:46:12 · 328 阅读 · 0 评论 -
JAVA多线程(八)Java多线程之死锁
1.JAVA多线程(八)Java多线程之死锁1.1什么是线程死锁?如何避免死锁? 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。下面通过一个例子来说明线程死锁,代码模拟了上图的死锁的情况 (代...原创 2019-12-31 00:41:46 · 196 阅读 · 0 评论 -
JAVA多线程(七)Java多线程之synchronized(同步锁)
1.JAVA多线程(七)Java多线程之synchronized(同步锁)1.1 synchronized(同步锁) synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依...原创 2019-12-31 00:37:01 · 667 阅读 · 0 评论 -
JAVA多线程(六)Java多线程之ThreadGroup
1.JAVA多线程(六)Java多线程之ThreadGroup1.1 ThreadGroup ThreadGroup是Java提供的一种对线程进行分组管理的手段,可以对所有线程以组为单位进行操作,如设置优先级、守护线程等。 在Java程序中,默认情况下,新的线程都会加入到 main 线程所在的 group 中, main 线程的 group 和线程同名。和线程存在父子关系一样, Thre...原创 2019-12-30 23:49:14 · 248 阅读 · 0 评论 -
JAVA多线程(五)Java多线程之interrupted线程中断
1.JAVA多线程(五)Java多线程之interrupted线程中断1.1 interrupted(线程中断) 一个线程执行完毕之后会自动结束,如果在运行过程中发生异常也会提前结束。通过调用一个线程的 interrupt() 来中断该线程,如果该线程处于阻塞、限期等待或者无限期等待状态,那么就会抛出 InterruptedException,从而提前结束该线程。但是不能中断 I/O 阻塞...原创 2019-12-29 17:14:52 · 420 阅读 · 2 评论 -
JAVA多线程(四)Java多线程之join等待结束
1.JAVA多线程(四)Java多线程之join等待结束1.1 join(等待结束) join()方法的作用,是等待这个线程结束;也就是说,thread.join()方法阻塞调用此方法的线程(calling thread)进入 TIMED_WAITING 状态,直到线程thread完成,此线程再继续;通常用于在main()主线程内,等待其它线程完成再结束main()主线程。packag...原创 2019-12-29 17:11:39 · 533 阅读 · 0 评论 -
JAVA多线程(三)Java多线程之守护线程
1.JAVA多线程(三)Java多线程之守护线程1.1 daemon(守护线程) Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)。用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 用户线程:运行在前台,执行具体的任务,程序的主线程,连接网络的子线程等都是用户线程。 守护线程:运行在后台,为其他前台线程服务。特...原创 2019-12-29 17:07:52 · 273 阅读 · 0 评论 -
JAVA多线程(二)Java多线程之火车票
1. Java多线程实现简单的火车售票程序 需求如下:铁道部发布了一个售票任务,要求销售10张票,要求有4个窗口来进行销售,请编写多线程程序来模拟这个效果第001窗口,正在售票,票号:1第004窗口,正在售票,票号:2第002窗口,正在售票,票号:3第003窗口,正在售票,票号:41.1 继承Thread类多线程进行售票继承Thread类的方式创建多线程进行售票的方式,在不加锁...原创 2019-12-27 23:08:56 · 1377 阅读 · 0 评论 -
JAVA多线程(一)认识JAVA多线程
@TOCJAVA多线程(一)认识JAVA多线程 在早期的计算机中不包含操作系统,它们从头到尾只执行一个程序,并肯这个程序能访问计算机中的所有的所有资源。在这种裸机环境中,不仅很难编写和运行程序,而且每次只能运行一个程序,这对于昂贵并且稀有的计算机资源来说也是一种浪费。 操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行:操作系统为各个独立执行的进程分配各种资源...原创 2019-12-27 15:30:10 · 345 阅读 · 0 评论