多线程
文章平均质量分 71
.CONSTANT
努力搬砖!
展开
-
Java系统预定义线程池
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收重用时则新建线程。}工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger.MAX_VALUE), 这样可灵活的往线程池中添加线程。如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。原创 2022-09-14 19:54:58 · 218 阅读 · 0 评论 -
java 死锁问题
虽然在Thread API中由指定线程优先级的机制,但是只能作为操作系统进行线程调度的一个参考,换句话说就是操作系统在进行线程调度是平台无关的,会尽可能提供公平的、活跃性良好的调度,那么即使在程序中指定了线程的优先级,也有可能在操作系统进行调度的时候映射到了同一个优先级。活锁指的是线程不断重复执行相同的操作,但每次操作的结果都是失败的。3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。原创 2022-09-07 21:44:30 · 89 阅读 · 0 评论 -
Java多线程的面试题
在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。共享变量被volatile修饰,在线程A更改变量的值后,会立即刷入主内存,并且会清除掉线程B的内存空间中的变量缓存,线程B直接读取内存中的变量,保证线程之间的可见性;3、Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断。超出的线程会在队列中等待、原创 2022-09-05 20:35:46 · 124 阅读 · 0 评论 -
Lock和synchronized的区别
但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。Condition对象是需要关联Lock对象的,经调用Lock对象的newCondition()对象创建而来,也就是说Condition的使用是需要依赖Lock对象的。提前获取Condition对象关联的锁(在基于wait/notify方法实现的方案中需要获取的是对。用newCondition()方法来获取的,这样,条件就和一个锁对象绑定起来了。- signal()唤醒在Lock对象上等待的单个线程。原创 2022-08-22 20:29:40 · 147 阅读 · 0 评论 -
java Lock接口
java中提供了两种不同的方式加锁,synchronized和juc包下的Lock接口。sychronized可重入、不可中断、非公平;Lock可重入、可中断、非公平和公平;Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制。- 需要用户主动释放锁- 可中断,设置超时中断- 默认也是非公平锁,可以设置成公平锁- 锁绑定多个condition用来精确唤醒。原创 2022-08-22 20:22:02 · 248 阅读 · 0 评论 -
Java生产者消费者模式
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这种生产消费能力不均衡的问题,所以便有了生产者和消费者模式。原创 2022-08-21 18:52:40 · 363 阅读 · 0 评论 -
线程的五种状态
新建,就绪,运行,阻塞,死亡。原创 2022-08-18 20:34:32 · 205 阅读 · 1 评论 -
java synchronized原理
synchronized用于实现同步处理,保证共享数据的安全性。原创 2022-08-18 19:59:16 · 62 阅读 · 0 评论 -
多线程编程细节Thread,Runnable,Callable和FutureTask使用
Thread类实现了Runnable接口,所以Thread对象也是可运行Runnable对象,同时Thread类也是线程类Thread类定义Thread()//一般用于在Thread类中覆盖定义run方法,可以使用匿名内部类进行定义Thread(Runnable)//使用最多的情况,run方式是由Runnable参数对象提供Thread(String name) //自定义线程名称由于Runnable接口属于函数式接口,所以一般使用简化写法。...原创 2022-08-17 20:07:54 · 195 阅读 · 0 评论 -
多线程ThreadPoolExecutor使用说明
任务拒绝策略,当阻塞队列满了,且线程池中的线程数达到maximumPoolSize,如果继续提交任务,时,keepAliveTime才会起作用,如果一个线程空闲的时间达到keepAliveTime,则。空闲线程(任务提交的平均速度快于被处理的速度),任务缓存队列可能出现无限制的增长。会终止,直到线程池中的线程数不超过corePoolSize。当提交一个任务时,线程池创建一个新线程执行任务,如果当前阻塞队列满了,且继续提交任务,则创建。新的线程执行任务,前提是当前线程数小于maximumPoolSize。..原创 2022-08-17 09:34:41 · 171 阅读 · 0 评论 -
Java线程池的原理
1、线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则执行第二步。2、线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里进行等待。如果工作队列满了,则执行第三步3、线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。...原创 2022-08-15 21:31:49 · 311 阅读 · 0 评论