多线程
倒不了的塔
这个作者很懒,什么都没留下…
展开
-
Semaphore
public class SemaphoreThread { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final Semaphore sp = new Semaphore(3); for(int i=0;i<10;i++){原创 2014-12-15 13:57:15 · 286 阅读 · 0 评论 -
关于DelayQueue的一些
先把例子写上import java.util.concurrent.DelayQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Test { public static void main(String[] args) throws原创 2016-01-18 18:07:35 · 526 阅读 · 0 评论 -
死锁
突然被问到这个,概念呢都知道:A需要等待B所拥有得资源才继续运行,B也一样,导致线程一直处于等待状态,而出现死锁现象。条件:互斥条件:一个资源只能由一个使用者占用请求和保持条件:保持现有的资源,又请求新的资源不剥夺条件:已被占用得资源,在未使用完前不能被剥夺环路等待条件:a需要b,b需要c,c需要a,形成环路package pool;import j原创 2015-11-04 10:22:09 · 366 阅读 · 0 评论 -
关于多线程的一些原则
一、我们需要将应用程序分成可以并行运行的多个子任务。二、对于计算密集型应用程序,我们将程序线程数限制为与处理器核心数相同三、对于IO密集型应用程序,阻塞时间 是影响线程数量得关键。四、计算公式:线程数=CPU核数/(1-阻塞系数);其中阻塞系数,计算密集型为0,IO密集型接近为1.五、避免共享可变状态,用隔离可变性或者共享不可变性取代。六、充分利用现代线程API和线程池。原创 2015-08-12 17:02:25 · 637 阅读 · 0 评论 -
Condition大用途
Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。 条件(也称为条件队列 或条件变量)为线程提供了一原创 2014-12-15 10:54:18 · 313 阅读 · 0 评论 -
停止正在执行的线程
一:直接利用线程中给出的方法来终止现场--该方法直接把线程停止public class ThreadStop1 { public static void main(String[] args) { stratrun(); } public static void stratrun(){ final ExecutorService pool = Executors.newSi原创 2014-12-11 17:23:48 · 948 阅读 · 0 评论 -
缓存系统
public class CacheSystem { /** * 一个缓存系统的设计思路 */ private Map cache = new HashMap(); private ReadWriteLock lock = new ReentrantReadWriteLock(); public Object getData(String key){ Object res原创 2014-12-11 17:27:48 · 275 阅读 · 0 评论 -
Callable和CompletionService的运用
线程本来是为了提高效益采用异步执行的方式,然而这个Callable的功能是等待结果。。。。public class CallableThread { public static void main(String[] args) { ExecutorService pool = Executors.newSingleThreadExecutor(); Future ft = pool.su原创 2014-12-11 17:19:50 · 363 阅读 · 0 评论 -
多线程对同一数据进行不同操作
示例一:网上多数采用的方法,设计得很巧妙import java.util.concurrent.atomic.AtomicInteger;public class AddSub { AtomicInteger at = new AtomicInteger(1); int j = 1; public static void main(String[] args) { AddS原创 2014-12-11 17:13:57 · 3418 阅读 · 1 评论 -
关于多线程线程池的一些整理
import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.con原创 2016-01-13 13:30:09 · 354 阅读 · 0 评论