Java多线程
Java多线程
Sampson_S
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Java多线程】线程池
线程池线程池是在JDK 1.5之后出现的概念,它为我们提供了一个Executor接口用于创建线程池。在JDK 1.5之前,如果我们在并发编程的过程中需要实现多个线程的话,采用的是多线程计数的方式,而之所以出现了线程池的概念,原因就是因为多线程计数在部分条件下无法满足程序的要求。多线程计数能够最大限度发挥多核处理器的计算能力,但是对于多线程来说,并不是线程数量越多,程序运行的效率越高,那么如果随意的去创建线程的话,反而会对系统性能带来不利的影响,原因就是因为线程的数量与系统性能不是一个正比的关系,而是一原创 2020-10-21 15:10:02 · 225 阅读 · 0 评论 -
【Java多线程】阻塞队列
阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法,即针对一个有界队列,当前队列满时,添加元素的操作会被阻塞;当前队列空时,从队列中获取元素的操作也会被阻塞。1、支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2、支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者原创 2020-10-19 22:27:20 · 302 阅读 · 0 评论 -
【Java多线程】线程安全的集合
线程安全的集合VectorVector集合是对ArrayList集合线程安全的实现,它们两者在方法的实现上没有什么太大的区别,最大的区别就是,Vector在方法前面加上了synchronized关键字,用于保证线程安全。【Java集合框架库】Vector类和Stack类Vector存在的问题:1、它的add()和get()方法都能够获取当前Vector对象的对象锁,但是有可能会发生读读互斥。2、当threadA在1下标处添加一个元素,threadB在2下标处修改一个元素时,同样有可能会发生原创 2020-10-18 21:56:28 · 11966 阅读 · 3 评论 -
【Java多线程】ReentrantLock
ReentrantLock在实现线程同步时,大多情况下使用的是Synchronized关键字实现,但是Synchronized的锁太过封闭,获得锁和释放锁都是系统自动的。所以为了更灵活的操作,在JDK1.5版本之后,就诞生了Lock接口以及其实现类。lock接口也是对资源上锁的一种工具,它不同于Synchronized的隐式上锁与解锁,lock接口中的获取锁和释放锁,是需要手动去操作的。Synchronized关键字的同步代码出现以下三种情况才会释放锁:1、同步代码块执行完成,自动释放锁。2、同原创 2020-10-18 17:47:14 · 556 阅读 · 4 评论 -
【Java多线程】线程通信
线程通信在客户端与服务端的通信过程中,一般情况下有两种通信模型,它们分别是同步阻塞模型和异步非阻塞模型。对于同步阻塞模型,当请求的事件出于某种原因没有返回结果时,此时线程将一直处于阻塞状态而不进行其他操作,例如我们去商场买电脑,我们需要等待卖家对我们的电脑做一系列的售后工作,此时我们并不能去做其他事情,只能等待卖家完成这些工作,这种模式就是同步阻塞模型。而对于异步非阻塞模型,当客户端请求事件时,服务器会先返回其事件所工作的线程工号,此时客户端可以继续进行其他操作,等待该事件处理完成,并通过工号查询所原创 2020-10-18 17:46:56 · 305 阅读 · 2 评论 -
【Java多线程】死锁
死锁多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。死锁中的经典例题:哲学家就餐问题相关链接:Java多线程:死锁造成死锁的必要条件互斥条件:某个资源在某一时间段内只能由一个线程占用。不可抢占条件:线程所得到的资源在原创 2020-10-16 20:32:59 · 302 阅读 · 2 评论 -
【Java多线程】悲观锁和乐观锁
悲观锁悲观锁:总是假设最坏的情况,每一次去拿数据都默认别人会修改,所以每次拿数据都会上锁,这样就会导致有其他人想要拿数据就会阻塞直到获取到这把锁。synchronized关键字的实现是悲观锁。悲观锁机制存在的问题:1、多线程竞争下,加锁、解锁都会导致比较多的上下文切换和调度延时,引起性能问题。2、一个线程池有锁会导致其他需要此锁的线程阻塞。3、数据量大时,独占锁回导致效率低下。4、如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级导致,引起性能问题。乐观锁乐观锁:每次那原创 2020-10-15 17:35:58 · 472 阅读 · 0 评论 -
【Java多线程】线程同步
线程同步首先,我们先来看一个Java多线程的实例,模拟银行叫号系统,代码如下://模拟银行叫号系统class Number extends Thread { private static int index = 1;//号码 //由于static变量的生命周期很长,同时共享资源或许会很多 //所以使用static修饰的共享资源对系统资源造成浪费 private String name; //柜台名称 private static final int MAX =原创 2020-10-14 20:29:24 · 326 阅读 · 0 评论 -
【Java多线程】Java多线程基础知识
Java多线程基础知识多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。进程和线程的基本认识进程:进程是一个正在执行的程序,一个程序可以同时执行多个任务(线程)。进程独占内存空间,同时原创 2020-07-19 17:13:35 · 443 阅读 · 0 评论
分享