Java多线程
YJian2008
这个作者很懒,什么都没留下…
展开
-
Java创建线程数目问题
一、JVM最大线程数 能创建的线程数的具体计算公式如下:(MaxProcessMemory-JVMMemory-ReservedOsMemory)/(ThreadStackSize)=Number of threads MaxProcessMemory 指的是一个进程的最大内存 JVMMemory JVM内存 ReservedOsMe转载 2013-11-28 14:05:13 · 1687 阅读 · 0 评论 -
Java线程的两种创建方式及优劣比较
1、通过实现Runnable接口线程创建(1).定义一个类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。(2).创建实现Runnable接口的类的对象。(3).创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象。(接口可以实现多继承)(4).调用Thread对象的start()方法,启动线程。这种方式创转载 2013-11-26 21:58:02 · 1576 阅读 · 0 评论 -
并发编程之交换器Exchanger
示例程序:生产者线程:import java.util.ArrayList;import java.util.List;public class Producer implements Runnable { private static List buffer = new ArrayList(); private boolean okToRun = true; private原创 2013-11-26 19:02:19 · 724 阅读 · 1 评论 -
并发编程之倒计数闭锁CountDownLatch
CountDownLatch看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务转载 2013-11-26 15:41:49 · 735 阅读 · 0 评论 -
并发编程之屏障CyclicBarrier
它是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点(common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时CyclicBarrier很有用,常用于协调分组的线程的启动和停止。因为该barrier在释放等待线程后可以重用,屏障可以被重复的重置状态。所以称它为循环的barrier。 CyclicBar原创 2013-11-26 14:16:40 · 1079 阅读 · 0 评论 -
阻塞队列之LinkedTransferQueue
TransferQueue是一个继承了BlockingQueue的接口,并且增加若干新的方法。LinkedTransferQueue是TransferQueue接口的实现类,其定义为一个无界的队列,一样具有先进先出(FIFO)的特性。 Doug Lea 这样评价它:"TransferQueue是一个聪明的队列,它是ConcurrentLinkedQueue、SynchronousQ转载 2013-11-25 21:47:46 · 12843 阅读 · 0 评论 -
阻塞队列之SynchronousQueue
SynchronousQueue是一种无缓冲的等待队列,类似于无中介的直接交易,有点像原始社会中的生产者和消费者,生产者拿着产品去集市销售给产品的最终消费者,而消费者必须亲自去集市找到所要商品的直接生产者,如果一方没有找到合适的目标,那么对不起,大家都在集市等待。相对于有缓冲的BlockingQueue来说,少了一个中间经销商的环节(缓冲区),如果有经销商,生产者直接把产品批发给经销商,而无需在意转载 2013-11-25 21:18:30 · 897 阅读 · 0 评论 -
java之yield,sleep,wait详解
1、sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。 例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有转载 2013-11-25 10:38:47 · 1105 阅读 · 0 评论 -
并发编程之信号量Semaphore
在以前的操作系统学习中,为了实现进程的同步,需要设置信号量执行P、V操作来实现。在Java中,线程之间的同步也是使用信号量Semaphore类来实现的。线程访问临界资源(需互斥访问的那段代码)的时候,如果信号量(计数器)大于0,则允许进入临界资源,若信号量小于等于0,则线程阻塞等待另外的线程释放临界资源。Java 并发库的Semaphore 可以很轻松完成信号量控制,Semaphore 通常用于限原创 2013-11-26 10:57:42 · 1098 阅读 · 0 评论 -
并发编程之移相器Phaser
示例程序:1、Horse程序import java.util.concurrent.atomic.AtomicInteger;public class Horse implements Runnable { private final static AtomicInteger idSource = new AtomicInteger(); private final int id原创 2013-11-26 18:58:14 · 841 阅读 · 0 评论 -
并发编程之Executors及其子类
java.util.concurrent.Executors是个工具类,它提供对Executor、ExecutorService、ScheduledExecutorService、ThreadFactory、Callable、ExecutorCompletionService、Future等类的一些实用方法。其中Callable、Future和FutureTask在《并发编程之Callable和F转载 2013-11-27 14:42:42 · 1168 阅读 · 0 评论 -
并行编程之Fork/Join框架
一、概述: 在实际情况中,很多时候我们都需要面对经典的“分治”问题。要解决这类问题,主要任务通常被分解为多个任务块(分解阶段),其后每一小块任务被独立并行计算。一旦计算任务完成,每一快的结果会被合并或者解决(解决阶段)。“分治”问题可以很容易地通过Callable线程的Executor接口来解决。通过为每个任务实例化一 个Callable实例,并在ExecutorService类中转载 2013-11-27 16:55:50 · 1473 阅读 · 0 评论 -
并发编程之Callable和Future接口、FutureTask类
Thread、Runnable、Callable,其中Runnable实现的是void run()方法,Callable实现的是V call()方法,并且可以返回执行结果,其中Runnable可以提交给Thread来包装下,直接启动一个线程来执行,而Callable则一般都是提交给ExecuteService来执行。Executor就是Runnable和Callable的调度容器,Future就是原创 2013-11-27 11:28:19 · 809 阅读 · 0 评论