
多线程
文章平均质量分 61
酷鱼影子
我不是代码的生产者,我只是代码的搬运工
展开
-
ForkJoin-任务分拆合并处理器
随着JDK 7被广大程序员所使用,ForkJoin也随着映入很多人的眼帘。不过,可能大多数人还没有机会在日常工作中真正使用ForkJoin。在没有真正使用ForkJoin之前,大家可能还分不清楚它究竟跟一个常见的线程池有什么区别[1]。所以,我写这篇文章的目的就是以一个简单但是又有说明性的代码示例来阐释对ForkJoin的用法。在本文的示例中,我会分别对线性方式、线程池和ForkJoin处理模原创 2014-01-20 23:46:57 · 2361 阅读 · 1 评论 -
使用Executors和ThreadPoolExecutor2
线程池负责管理工作线程,包含一个等待执行的任务队列。线程池的任务队列是一个Runnable集合,工作线程负责从任务队列中取出并执行Runnable对象。java.util.concurrent.executors 提供了 java.util.concurrent.executor 接口的一个Java实现,可以创建线程池。下面是一个简单示例:首先创建一个Runable 类:WorkerT原创 2014-01-20 21:37:35 · 1573 阅读 · 0 评论 -
多线程Demo-Condition通信
package Thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;//本示例针对多线程Demo-主线程和子线程交替运行 改造,使用Reentra原创 2015-02-06 11:00:04 · 715 阅读 · 0 评论 -
多线程demo-主线程和子线程交替运行
package Thread;/** * 实现效果:主线程运行10次,子线程运行100次,主线程和子线程循环交替运行50次 主要演示synchronized和wait、notify的使用 * 适用场景:只有两个线程的情况,呵呵 */public class ThreadAltermate {public static void main(String[] ar原创 2015-02-06 10:44:30 · 2183 阅读 · 0 评论 -
多线程Demo-CountDownLatch减数器
package Thread;import java.util.Random;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concu原创 2015-02-06 11:32:46 · 702 阅读 · 0 评论 -
多线程Demo-Exchanger
package Thread;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExchangerTest {public static void原创 2015-02-06 11:43:10 · 529 阅读 · 0 评论 -
多线程Demo-Semaphore 控制同时访问资源的线程个数
package Thread;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;import java.util.concurrent原创 2015-02-06 11:44:42 · 729 阅读 · 0 评论 -
多线程Demo-CompletionService收集线程池执行结果
package Thread;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutorCompletionService;import jav原创 2015-02-06 11:48:46 · 731 阅读 · 0 评论 -
多线程demo-ThreadLocal面向对象的封装
package Thread;import java.util.Random;import java.util.concurrent.TimeUnit;/** * ThreadLocal示例 */public class ThreadLocalTest {public static void main(String[] args) {for(int i=原创 2015-02-06 10:48:36 · 888 阅读 · 0 评论 -
多线程Demo-ArrayBlockingQueue阻塞队列
package Thread;import java.util.Random;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.TimeUnit;public class BlockingQueueTest {public static void main(Str原创 2015-02-06 11:54:41 · 1186 阅读 · 0 评论 -
多线程总结
1、多线程两个很重要的概念,同步(互斥)和通信2、怎么实现同步?加锁3、怎么实现通信?wait(等待)和notify(唤醒)4、同步的目的:使用同一个锁的代码块同时只能给一个线程使用5、通信的目的:实现多线程间的交互,达到线程控制的目的6、同步的原则:多线程同时操作同一数据可能产生安全问题时需要同步;7、同步工具:synchronized关键字、ReentrantLock,原创 2015-02-06 10:41:35 · 623 阅读 · 0 评论 -
Timer/TimerTask 学习
原文链接:https://my.oschina.net/u/138995/blog/193243Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。1、添加一个任务,继承实现TimerTaskpublic class TemplateTask extend转载 2016-11-17 10:20:59 · 399 阅读 · 0 评论 -
延迟队列DelayQueue
原文链接:http://www.cnblogs.com/jobs/archive/2007/04/27/730255.html我们谈一下实际的场景吧。我们在开发中,有如下场景a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响转载 2016-11-17 11:29:07 · 3100 阅读 · 0 评论 -
多线程Demo-空中网面试题(张孝祥讲解)
摘自传智播客_张孝祥_空中网挑选实习生的面试题 视频教程的,(主要是线程与队列的使用).与本人无关,仅供以后参考使用空中网4k/5k月薪挑选大四实习生的线程题 两年前,我们一个大四的学员去应聘空中网的实习生职位,空中网只给他出了三道线程题,拿回家做两天后再去给经理讲解,如果前两题做好了给4k月薪,第三道题也做出来的话就给5k的月薪。这样的实习薪水和招聘要求,不需要转载 2015-02-06 12:00:12 · 3068 阅读 · 0 评论 -
多线程Demo-CyclicBarrier
package Thread;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//CyclicBarrier:等待多个线程到达某个位置后继续执行,提供await方法。p原创 2015-02-06 11:36:14 · 652 阅读 · 0 评论 -
多线程Demo-ReentrantReadWriteLock读写锁
package Thread;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。 */public class R原创 2015-02-06 11:24:46 · 796 阅读 · 0 评论 -
JAVA处理线程超时
在实际业务中,由其是多线程并开业务中,经常会遇到某个线程执行超时。而程序如果不捕获这类情况,就会导致程序一直处于等待状态,从而影响后续线程的运行。比如说网络通迅、单任务下的复杂数据库查询等,通常处理这类问题,可以启用一个后台守护线程来监控用户线程(业务线程)的执行是否超时,如果超时就不在等待,这种做法,通常是在调用用户线程的.start()方法之前,调用守护线程的start()方法,同时将超时转载 2013-12-24 18:57:10 · 21763 阅读 · 0 评论 -
Java ScheduledThreadPoolExecutor延迟或周期性执行任务
Java提供的Time类可以周期性地或者延期执行任务,但是有时我们需要并行执行同样的任务,这个时候如果创建多个Time对象会给系统带来负担,解决办法是将定时任务放到线程池中执行。Java的ScheduledThreadPoolExecutor类实现了ScheduledExecutorService接口中定义的以不同方法执行任务的方法。之前,我写过一篇关于Java ThreadPoolExe转载 2013-11-29 23:53:18 · 7963 阅读 · 0 评论 -
java并发编程中CountDownLatch和CyclicBarrier的使用
java并发编程中CountDownLatch和CyclicBarrier的使用 在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决? 如果是一个线程等待一个线程,则可以通过await()和notify()来实现; 如果是一个线程等待多个线程,则就可以使用CountDownLatch和CyclicBarrier来实现比较好的控制。 下面来详原创 2014-02-13 11:20:32 · 1360 阅读 · 0 评论 -
Java多线程-新特性-有返回值的线程
Java多线程-新特性-有返回值的线程在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。现在Java终于有可返回值的任务(也可以叫做线程)了。可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该转载 2014-06-25 23:57:54 · 790 阅读 · 0 评论 -
Java多线程-新特征-锁(下)
Java多线程-新特征-锁(下)在上文中提到了Lock接口以及对象,使用它,很优雅的控制了竞争资源的安全访问,但是这种锁不区分读写,称这种锁为普通锁。为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,在一定程度上提高了程序的执行效率。Java中读写锁有个接口java.util.concurrent.locks.ReadWriteLock,也有具体转载 2014-06-26 11:09:40 · 559 阅读 · 0 评论 -
向线程传递数据的三种方法
在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。本文就以上原因介绍了几种用于向线程传递数据的方法,在下一篇文章中将介绍从线程中返回数据的方法转载 2014-06-22 22:18:33 · 811 阅读 · 0 评论 -
Java多线程-新特征-锁(上)
Java多线程-新特征-锁(上)在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口Condition、Lock、ReadWriteLock。Condition: Condition 将 Object 监视器方法(wait、notify转载 2014-06-26 11:10:34 · 619 阅读 · 0 评论 -
Java线程:线程的同步与锁
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中等待的某个线程就可以拿到锁转载 2013-10-10 23:09:12 · 633 阅读 · 0 评论 -
线程中的join使用
Java线程中的join是使用线程从异步执行变成同步执行。原创 2014-06-22 22:25:29 · 668 阅读 · 0 评论 -
多线程-原子操作
一、何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成) 在x86 平台上,CPU提供了在指令执行期间对总线原创 2014-12-10 23:07:53 · 2178 阅读 · 0 评论 -
java7新特性——使用ThreadLocalRandom产生并发随机数
Java 7之前我们使用Math.random()产生随机数,使用原子变量来保存当前的种子,这样两个线程同时调用序列时得到的是伪随机数,而不是相同数量的两倍。ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。ThreadLocalRandom不是直接用new实例化,而是第一次使用其静态方法current()。从Math.ran转载 2014-12-10 23:33:03 · 13660 阅读 · 0 评论 -
线程安全的单例模式
饿汉式,线程安全/*这个先初始化对象称为:饿汉式 Single类一进内存,就已经创建好了对象。*/private Single(){}; private static Single s=new Single();public static Single getInstance(){return s;}懒汉式,需加锁/*对象是方法被原创 2014-12-10 23:16:53 · 545 阅读 · 0 评论 -
Java多线程-新特征-条件变量
Java多线程-新特征-条件变量条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。这里的条件和普通意义上的条件表达式有着天壤之别。条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化转载 2014-06-25 23:56:18 · 674 阅读 · 0 评论