java多线程
arthur.dy.lee
这个作者很懒,什么都没留下…
展开
-
java多线程系列_让主线程等待子任务执行的各种方式
业务场景在web应用开发中我们经常会遇到这样的场景:一个请求任务,我们需要去查多个库,并对查询到的数据做处理,此时如果采用同步的方式去查,往往会导致请求响应时间过慢。比如:两个查询任务task1,task2,task1查询数据要花2s,处理数据要花1s;task2查询数据花5s,处理数据花2s,那一次请求的时间是2+1+5+2=10s。而如果我们用异步的方式,则能减少请求响应的时间。 而利...原创 2018-07-21 23:12:04 · 2480 阅读 · 1 评论 -
进程的挂起与阻塞
挂起与阻塞转载 2016-06-21 00:30:03 · 17666 阅读 · 12 评论 -
线程的生命周期以及java提供的方法
线程的生命周期以及java提供的方法转载 2016-06-20 23:53:54 · 478 阅读 · 0 评论 -
Java多线程锁释放
Java多线程锁释放转载 2016-06-20 23:19:15 · 4498 阅读 · 0 评论 -
并发(Concurrent)与并行(Parallel)的区别
并发(Concurrent)与并行(Parallel)的区别转载 2016-06-20 23:00:11 · 625 阅读 · 0 评论 -
分布式锁1 Java常用技术方案
分布式锁Java常用技术方案转载 2016-06-20 14:57:34 · 493 阅读 · 0 评论 -
sleep和interrupt的关系
先sleep,后才能interrupt。 sleep是阻塞,线程会暂时停在这里。interrupt 是打断。只有阻塞的线程被打断了,才会报这个异常。打断后你不处理异常,继续执行循环,线程重新继续跑,所以interrupt变成false了。原创 2016-07-06 00:09:07 · 3705 阅读 · 0 评论 -
文件搜索
代码演示了搜索系统某个文件目录下的文件搜索功能,并演示了throw new InterruptedException();来控制线程的中断转载 2016-07-05 22:28:45 · 458 阅读 · 0 评论 -
配置Eclipse来调试并发代码
配置Eclipse来调试并发代码IDE最有用的特点其一就是debugger。你可以一步一步的执行你的应用并分析你的程序中全部对象和变量的值。如果你使用 Java 编程语言,那么 Eclipse 是最普遍的 IDE 之一。它有一个内置调试器(integrated debugger)允许你测试你的应用。默认情况,等你试调并发应用,debugger 找到断点( breakpoint), 它只是把有断点(b转载 2016-07-27 00:23:18 · 1810 阅读 · 0 评论 -
生产消费者4 - 实现一个基于优先级的传输队列【消费顺序是由优先级决定的而不是抵达时间】
实现一个基于优先级的传输队列Java 7 API 提供几种与并发应用相关的数据类型。从这里面,我们想来重点介绍以下2种数据类型:LinkedTransferQueue:这个数据类型支持那些有生产者和消费者结构的程序。 在那些应用,你有一个或者多个数据生产者,一个或多个数据消费者和一个被生产者和消费者共享的数据类型。生产者把数据放入数据结构内,然后消费者从数据结构内提取数据。如果数据结构为空,消费者转载 2016-07-26 00:54:25 · 822 阅读 · 0 评论 -
Semaphore的使用
Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。转载 2016-07-14 22:53:09 · 1063 阅读 · 0 评论 -
实现你自己的 RunnableScheduledFuture 接口来执行延迟和周期性任务。【回头再看看】
自定义在计划的线程池内运行的任务计划的线程池是 Executor 框架的基本线程池的扩展,允许你定制一个计划来执行一段时间后需要被执行的任务。 它通过 ScheduledThreadPoolExecutor 类来实现,并允许运行以下这两种任务:Delayed 任务:这种任务在一段时间后仅执行一次。Periodic 任务:这种任务在延迟后执行,然后通常周期性运行Delayed 任务可以执行 Ca转载 2016-07-25 23:22:16 · 5970 阅读 · 0 评论 -
同步、异步、阻塞与非阻塞
h同步、异步、阻塞与非阻塞转载 2016-07-02 17:13:12 · 1361 阅读 · 0 评论 -
Java多线程-生产消费者2
有关Java多线程-生产消费者,一个生产,多个线程消费,下面的代码模拟了整个过程,以及多线程中condition的用法。翻译 2016-07-13 22:09:46 · 491 阅读 · 0 评论 -
控制并发阶段性任务的改变
控制并发阶段性任务的改变Phaser 类提供每次phaser改变阶段都会执行的方法。它是 onAdvance() 方法。它接收2个参数:当前阶段数和注册的参与者数;它返回 Boolean 值,如果phaser继续它的执行,则为 false;否则为真,即phaser结束运行并进入 termination 状态。如果注册参与者为0,此方法的默认的实现值为真,要不然就是false转载 2016-07-18 00:01:24 · 486 阅读 · 0 评论 -
在并发任务间交换数据-生产消费者3
在并发任务间交换数据. Exchanger 用法:提供了一种允许2个并发任务间相互交换数据的同步应用。更具体的说,Exchanger 类允许在2个线程间定义同步点,当2个线程到达这个点,他们相互交换数据类型,使用第一个线程的数据类型变成第二个的,然后第二个线程的数据类型变成第一个的。这个类在遇到类似生产者和消费者问题时,是非常有用的。来一个非常经典的并发问题:你有相同的数据buffer,一个或多个数据生产转载 2016-07-18 00:49:00 · 372 阅读 · 0 评论 -
SimpleDateFormat并发隐患及其解决-Joda-Time
Joda-Time替换SimpleDateFormat并发隐患转载 2017-08-24 16:08:59 · 4326 阅读 · 0 评论 -
线程间的通信、同步方式与进程间通信方式
线程间的通信、同步方式与进程间通信方式1、线程间的通信方式使用全局变量 主要由于多个线程可能更改全局变量,因此全局变量最好声明为volatile使用消息实现通信 在Windows程序设计中,每一个线程都可以拥有自己的消息队列(UI线程默认自带消息队列和消息循环,工作线程需要手动实现消息循环),因此可以采用消息进行线程间通信sendMessage,postMessage。 1)定义消息#de转载 2017-08-14 11:57:24 · 340 阅读 · 0 评论 -
关于Java并发编程的总结和思考
编写优质的并发代码是一件难度极高的事情。Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的,但是当我们对并发编程有了更深刻的认识和更多的实践后,实现并发编程就有了更多的方案和更好的选择。本文是对并发编程的一点总结和思考,同时也分享了Java 5以后的版本中如何编写并发代码的一点点经验。为什么需要并发 并发其实是一种解耦合的策略,它帮助我们把做什么(目标)和什么时候做(时机)转载 2016-11-17 22:40:42 · 708 阅读 · 0 评论 -
java当中的定时器的4种使用方式
定时器转载 2016-08-07 23:50:55 · 6365 阅读 · 3 评论 -
Java并发程序设计教程
温少-内容列表【超链接内有pdf可以下载】1、使用线程的经验:设置名称、响应中断、使用ThreadLocal 2、Executor :ExecutorService和Future ☆ ☆ ☆ 3、阻塞队列 : put和take、offer和poll、drainTo 4、线程间的协调手段:lock、condition、wait、notify、notifyAll ☆ ☆ ☆ 5、Lock转载 2016-08-01 00:16:23 · 512 阅读 · 0 评论 -
并发相关网络资源
维基百科并发控制专题 http://en.wikipedia.org/wiki/Category:Concurrency_control 维基百科并行计算专题 http://en.wikipedia.org/wiki/Parallel_computing 维基百科非阻塞同步专题 http://en.wikipedia.org/wiki/Non-blocking_synchronizatio转载 2016-07-31 23:59:32 · 357 阅读 · 0 评论 -
Fork/Join框架介绍IV-异常处理及取消任务【在数组中找指定数值,一旦找到立马停止任务的运行】
Fork/Join-异常处理及取消任务在ForkJoinPool类中执行ForkJoinTask对象时,在任务开始执行前可以取消它。ForkJoinTask类提供了cancel()方法来达到取消任务的目的。在取消一个任务时必须要注意以下两点: 1、 ForkJoinPool类不提供任何方法来取消线程池中正在运行或者等待运行的所有任务; 2、 取消任务时,不能取消已经被执行的任务。转载 2016-07-21 00:32:47 · 1828 阅读 · 1 评论 -
Fork/Join框架介绍 I
Fork/Join框架介绍 I转载 2016-02-23 15:07:55 · 469 阅读 · 0 评论 -
Fork/Join框架介绍III 【在一个文件夹及其子文件夹中来搜索带有指定扩展名的文件】
Fork/Join异步在ForkJoinPool中执行 ForkJoinTask时,可以采用同步或异步方式。当采用同步方式执行时,发送任务给Fork/Join线程池的方法直到任务执行完成后才会返回结果。而采用异步方式执行时,发送任务给执行器的方法将立即返回结果,但是任务仍能够继续执行。需要明白这两种方式在执行任务时的一个很大的区别。转载 2016-07-20 23:31:16 · 1572 阅读 · 1 评论 -
Phaser运行阶段性并发任务【在指定的文件夹和子文件夹中获得文件扩展名为.log的文件列表】
运行阶段性并发任务,phaser用法,实例: 在指定的文件夹和子文件夹中获得文件扩展名为.log的文件列表.转载 2016-07-17 22:49:04 · 731 阅读 · 0 评论 -
Fork/Join框架介绍 II 【在文档中查找一个词并返回文档或行中所出现这个词的次数】
查看《Fork/Join框架介绍 I》 请点击简介通常,使用Java来开发一个简单的并发应用程序时,会创建一些Runnable对象,然后创建对应的Thread 对象来控制程序中这些线程的创建、执行以及线程的状态。自从Java 5开始引入了Executor和ExecutorService接口以及实现这两个接口的类(比如ThreadPoolExecutor)之后,使得Java在并发支持上得到了进一步的提转载 2016-07-20 22:59:26 · 873 阅读 · 0 评论 -
40个Java多线程问题总结
40个Java多线程问题总结转载 2016-06-23 16:17:07 · 694 阅读 · 0 评论 -
执行者分离任务的启动和结果的处理
CompletionService 类有一个方法来提交任务给执行者和另一个方法来获取已完成执行的下个任务的Future对象。在内部实现中,它使用Executor对象执行任务。这种行为的优点是共享一个CompletionService对象,并提交任务给执行者,这样其他(对象)可以处理结果。转载 2016-07-19 00:56:49 · 537 阅读 · 0 评论 -
浅析Java的Thread.join()方法
如果在线程a中执行t.join()方法,则a会等t线程执行完之后再执行t.join后的代码。换句话说,谁用obj.join()方法,谁就有执行权限,会一直执行完任务。但前提是必须能够拿到线程obj对象的锁。Join可以实现线程执行的顺序!原创 2015-08-10 09:52:37 · 3763 阅读 · 1 评论 -
并发集合
并发集合引言Java提供了你可以在你的并发程序中使用的,而且不会有任何问题或不一致的数据集合。基本上,Java提供两种在并发应用程序中使用的集合: 阻塞集合:这种集合包括添加和删除数据的操作。如果操作不能立即进行,是因为集合已满或者为空,该程序将被阻塞,直到操作可以进行。 非阻塞集合:这种集合也包括添加和删除数据的操作。如果操作不能立即进行,这个操作将返回null值或抛出异常,但该线程将不会阻转载 2016-07-24 23:34:39 · 2449 阅读 · 0 评论 -
使用线程安全的、带有延迟元素的列表
概述DelayedQueue类是Java API提供的一种有趣的数据结构,并且你可以用在并发应用程序中。在这个类中,你可以存储带有激活日期的元素。方法返回或抽取队列的元素将忽略未到期的数据元素。它们对这些方法来说是看不见的。为了获取这种行为,你想要存储到DelayedQueue类中的元素必须实现Delayed接口。这个接口允许你处理延迟对象,所以你将实现存储在DelayedQueue对象的激活日期,转载 2016-07-24 23:18:33 · 423 阅读 · 0 评论 -
java.util.concurrent并发包诸类概览
这篇文章中,我只是简要地记录类的功能和使用,希望可以帮助大家全面掌握或回顾Java的并发包。当然,任何不清楚的接口和功能,JDK的API手册是最好的参考材料,如果想更进一步,参透至少大部分类的实现代码,这会非常非常辛苦。转载 2015-09-11 20:48:57 · 548 阅读 · 0 评论 -
ThreadPoolExecutor几点使用建议
整个ThreadPoolExecutor的任务处理有4步操作: 第一步,初始的poolSize < corePoolSize,提交的runnable任务,会直接做为new一个Thread的参数,立马执行 第二步,当提交的任务数超过了corePoolSize,就进入了第二步操作。会将当前的runable提交到一个block queue中 第三步,如果block queue是个有界队列,当队列满了之后就进入了第三步。如果poolSize < maximumPoolsize时,会尝试ne转载 2015-09-26 08:21:38 · 783 阅读 · 0 评论 -
死锁实现和怎样分析死锁
分析死锁,我们需要用到"Java thread dump"应用,可以点击超链接查看。避免嵌套死锁:最是引起死锁最常见的原因,如果你已经有锁了避免锁住另一个资源。如果你只工作在一个对象上的锁,这是最不可能产生死锁的了。例如,这里有一个run方法的实现,在方法中,没有嵌套锁,程序会正常的运行而且不会产生死锁。只对需要的加锁: 你应该在为,在工作中的唯一资源(可能是一个局部,也可能是个对象,也可可能范围更广,但是那只是用到的资源;对于不需要的部分,不应该加锁)上的去获得锁,例如上面的程序,我只在完成的对象资源上加原创 2015-08-12 11:28:00 · 3554 阅读 · 0 评论 -
spring的事务传播行为、隔离级别和事务的一些基本概念
事务ACID: 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。ISOLATION_DEFAULT:使用数据库默认的隔离级别。 ISOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读、不可重复读和幻读。 ISOLATION_READ COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读。 ISOLATION_REPEATABLE_原创 2015-09-02 16:25:47 · 2402 阅读 · 0 评论 -
哈希、HashMap原理及源码、Hash的一些应用面试题
Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不 同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。原创 2015-08-14 23:20:01 · 5416 阅读 · 2 评论 -
==、equals、hashcode的区别和联系
若重写equals(Object obj)方法,有必要重写hashcode()方法。HashMap,也是先判断hashcode再判断equals,如果都相同,则表示:在集合添加中,认为是同一个"东西"。复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址原创 2015-08-16 23:28:18 · 2105 阅读 · 0 评论 -
ConcurrentHashMap原理分析
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅转载 2015-08-17 01:18:56 · 877 阅读 · 0 评论 -
面试中HashMap的工作原理
HashMap的工作原理这篇文章极好,还有一些其它的东西,说的也很透彻。详情,请点击: http://www.importnew.com/7099.html2013/11/15 | 分类: 基础技术 | 16 条评论 | 标签: HASHPMAP分享到:本文由 ImportNew - 唐小娟 翻译自 J转载 2015-08-17 00:33:07 · 2511 阅读 · 0 评论