阻塞队列:
1)BlockingQueue该接口提供了:
add()/remove() 如果当队列没有数据,从队列中取数据;或者队列中数据已满,
向队列中添加数据;则会抛出异常.
put()/take() 如果当队列没有数据,从队列中取数据;或者队列中数据已满,
向队列中添加数据;则会形成阻塞.
offer()/poll() 会给调用者返回特殊的值,开发者可以通过这些值做相应的处理
...
分类:
编程语言 时间:
2014-09-29 20:43:13
阅读次数:
297
设计四个线程,其中共两个线程每次对j增加1,另外两个线程每次对j减少1。循环100次,写出程序。...
分类:
编程语言 时间:
2014-09-29 18:44:41
阅读次数:
180
优先级>1~10
线程调度
OS:
抢占式>更高优先级的线程会取代当前运行的线程
非抢占式>即使存在更高优先的线程,也不会取代当前运行的线程
JVM:
绿色线程:最简单的线程处理模型.对os来说只有一个进程一个线程,因此
jvm必须维护该创建线程的原始信息等..
守护线程/非守护线程:
在创建线程的父线程死亡时,守护线程会自动结束,而非守护线程
则不会.
...
分类:
编程语言 时间:
2014-09-28 12:11:41
阅读次数:
154
1. 后台线程: 如果在某个线程运行之前调用了setDaemon方法,则该线程就变为后台线程。 对java程序来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个进程只有后台线程在运行,这个进程就会结束。public class TestSetDaemon { public stat...
分类:
编程语言 时间:
2014-09-27 17:04:30
阅读次数:
194
前面我们已经学习了使用ThreadPoolExecutor类来实现自动创建和运行线程。但是na'xie...
分类:
编程语言 时间:
2014-09-26 23:09:18
阅读次数:
312
ava中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。共同点:1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而...
分类:
编程语言 时间:
2014-09-26 20:15:08
阅读次数:
165
在多线程中,两个线程之间交换数据是非常常见的情况,我们可以使用公共的数据结构,同样,Java也提供了很好
的类供我们使用,那就是Exchanger类,这个类可以帮助我们在两个线程之间同步数据结构,下面我们以这个类再来实
现一遍生产者消费者模型,貌似这个模型已经被写烂了。
package com.bird.concursey.charpet5;
import java.util.Li...
分类:
编程语言 时间:
2014-09-23 23:21:55
阅读次数:
368
以前我们创建线程的时候都是主动的new一个Thread,然后调用他们的start方法,但是如果线程非常多,任务也非
常多的时候,这样写就会显得非常麻烦,当然可能效率也不是很高,Java给我们提供了叫线程创建器这个样概念的类,
他可以帮助我们管理这些线程,你做的就是编写好代码,然后交给他,她就会自动帮你运行。
当然,带cache的threadpool 对于死掉的线程重新调用,在性能上也会有非常...
分类:
编程语言 时间:
2014-09-23 23:02:15
阅读次数:
315
ThreadPoolExecutor提供了另一个非常强有力的接口,那就是callable。这个接口和runnable类似,但是实现这个
接口的方法是call方法,这个方法是可以返回值的,弥补了runnable不能返回值的悲哀。而且这个方法可以配合ThreadP
oolExecutor使用,获得Future接口,从这个接口的名字我们就能知道,返回的这个类似于指向这个线程的一个指针,我
们能通过...
分类:
编程语言 时间:
2014-09-23 22:57:05
阅读次数:
250
在Phaser类中,我们在每个线程中,每个线程进行完一个阶段完成后都会等待其他线程完成后再一起进行,当所
有线程都完成了一个任务的时候,会调用Phaser的onAdvance方法,如果我们想在每个阶段,所有线程都完成他们的阶
段工作后做点啥事的话,那就得继承Phaser类来重写Onadvance这个方法来实现我们的目的,下面我们用一个例子来说
明,例子就是模拟多个学生考试,考试分为三个阶段,...
分类:
编程语言 时间:
2014-09-23 22:28:05
阅读次数:
485