Java基础-多线程
潜水生活
这个作者很懒,什么都没留下…
展开
-
(一) 线程的概念
多线程一. 线程的概念多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。每一个任务称为一个线程(thread)多进程和多线程的区别:本质的区别在于每个进程拥有自己的一整套变量,而线程则共享数据。1.一个独立的线程中执行一个任务的简单过程:第一种:1)将任务代码移到实现了Runnable接口的类的run方法中;publi...原创 2011-10-22 12:19:15 · 68 阅读 · 0 评论 -
(十)同步器
java.util.concurrent包中包含了几个能帮助人们互相合作的线程集的类。这些这些机制具有为线程之间的 共用结点模式(common rendezvos patterns)提供的“预置功能”。如果有一个相互合作的线程集满足这些行为模式之一,那么应该直接重用合适的库类,而不要试图提供手工的锁与条件集合。共有以下5中同步器(1)CyclicBarrier ...原创 2011-11-14 23:32:21 · 156 阅读 · 0 评论 -
(九) 执行器(线程池)
线程池: 1.使用线程池(Thread Pool)的前提是,程序中创建了大量的生命周期很短的线程。构建一个新的线程是有一定代价的,因为涉及与操作系统的交互。 2.另一个使用线程池的理由是减少并发线程的数目。创建大量线程会大大降低性能甚至使虚拟机崩溃。所以,当有一个会创建许多线程的算法,应该使用一个线程数“固定的”线程池以限制并发总数。 3.线程池中包含许多准备运行的空闲线程,将Runnable...原创 2011-11-14 22:39:22 · 125 阅读 · 0 评论 -
(八)Callable与Future
Callable是一个参数化的类型,只有一个方法call。public interface Callable<V>{ V call() throw Exception;}Future保存异步计算的结果,可以启动一个计算,将Future对象交给某个线程,然后忘掉它。Future对象的所有者在结果计算好之后就可以获得他。public interface Futur...原创 2011-11-09 21:50:38 · 94 阅读 · 0 评论 -
(七) 线程安全的集合
如果多线程要并发的修改一个数据结构,例如散列表,那么很容易破坏这个数据结构。可以通过锁来保护共享数据结构,但是选择线程安全的实现作为替代可能更容易些。1.高效的映像、集合和队列java.util.concurrent包提供了映像、集合和队列的高效实现:(1)ConcurrentLinkedQueue : 一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行...原创 2011-11-04 22:58:09 · 80 阅读 · 0 评论 -
(六) 阻塞队列
阻塞队列(BlockingQueue)对于许多线程问题,可以通过使用一个或多个队列以优雅且安全的方式将其形式化。例如:生产者线程向队列插入元素,消费者线程则取出它们。在协调多个线程之间的合作时,阻塞队列是一个有用的工具。工作者线程可以周期性将中间结果存储在阻塞队列中。其他工作者的线程移出中间结果并进一步加以修改。队列会自动平衡负载。阻塞队列(java.util.co...原创 2011-11-01 22:50:43 · 88 阅读 · 0 评论 -
(五) 同步
多数实际的多线程应用中,两个或两个以上的线程需要共享同一数据的存取。 1.竞争条件的一个例子public class Bank { private final double[] accounts; public Bank(int n, double initialBalance) { accounts = new double[n]; for (int i = 0...原创 2011-10-26 22:27:58 · 91 阅读 · 0 评论 -
(四) 线程属性
线程属性包括:线程优先级、守护线程、线程组和处理未捕获异常的处理器。1.线程优先级在Java程序设计语言中,每一个线程都有一个优先级。默认情况下,一个线程继承它的父线程的优先级。可以将优先级设置为MIN_PRIORITY(在Thread类中定义为1)与MAX_PRIORITY(定义为10)之间的任何值。每当线程调度器有机会选择新线程时,它首先选择有较高优先级的线程。注意...原创 2011-10-24 20:06:37 · 106 阅读 · 0 评论 -
(三) 线程状态
1.新生线程 当new一个线程时,如new Thread(r),该线程的状态是new。当一个线程处于新生状态时,程序还有没有开始运行线程中的代码。在线程运行之前还有一些簿记工作要做。 2.可运行线程 调用start()方法,线程处于runnable状态。可能运行也可能没有运行,取决于系统(线程的优先级和时间片机制)。在具有多个处理器的机器上,每个处理器,运行一个线程,可以有...原创 2011-10-24 20:05:53 · 58 阅读 · 0 评论 -
(二) 中断线程
当线程的run()方法执行方法体中最后一句语句后,并经由执行return语句返回时,或者出现了方法中没有捕获的异常时,线程将终止。 sleep : 该方法为static,并返回void值,在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),阻塞线程,所以只对当前运行线程起作用。与用类还是实例调用无关。 interrupt : 强制终止线程,并返回void值...原创 2011-10-24 11:12:11 · 87 阅读 · 0 评论 -
多线程设计主要API总结
java.lang.Runnable 接口 void run() 必须重写这个方法,并在这个方法中提供所要执行的任务。 java.lang.Thread 类,该类实现了Runnable接口 构造 Thread(Runnable target) 构造一个新线程,用于调用给定target的run()方法 方法 1.启动和中断线程void start() : 启动这个线程,将...原创 2011-11-14 23:33:04 · 90 阅读 · 0 评论