一、Thread调度的概述
import java.util.*;
import java.text.*;
public class Task implements Runnable {
long n;
String id;
private long fib(long n) {
if (n == 0)
return 0L;
...
分类:
编程语言 时间:
2014-06-22 14:15:04
阅读次数:
298
卖票问题通常被用来举例说明线程同步问题,在Java中,采用关键字synchronized关键字来解决线程同步的问题。
分类:
编程语言 时间:
2014-06-18 17:13:11
阅读次数:
221
调用wait()和notify()方法的前提是,线程调用这两个方法时,拥有当前对象的monitor,即锁。所以,这两种方法的调用必须放在synchronized方法或synchronized块中。
分类:
编程语言 时间:
2014-06-18 15:19:10
阅读次数:
312
JDK1.2引入最有争议性的改变是将集合类默认为不是Thread安全性的。
一、Collection Class的概述
1. 具有Threadsafe 的Collection Class:
java.util.Vector(List) 列表集合,通过索引操作。
java.util.Stack(List) 继承自Vector,提供LIFO的顺序操作push进入,pop出元素。
ja...
分类:
编程语言 时间:
2014-06-18 08:07:54
阅读次数:
262
多线程数据同步错误比较难检测,因为通常是与事件的特定发生顺序有关。
一、同步术语
Barrier(屏障)
barrier是多个Thread的集合点:所有的Thread都应该到齐在这个barrier之后才能允许它们继续下去。
Condition variable(条件变量)
实际上不是变量,而是与某个lock有关联的变量。
Event variable(事件变...
分类:
编程语言 时间:
2014-06-18 06:23:12
阅读次数:
356
一、能避免同步吗?
取得锁会因为以下原因导致成本很高:
取得由竞争的锁需要在虚拟机的层面上运行更多的程序代码。
要取得有竞争锁的线程总是必须等到锁被释放后。
1. 寄存器的效应
计算机有一定数量的主寄存器用来存储与程序有关的数据。
从逻辑上的观点来看,每个Thread都有自己的一组寄存器。当操作系统将某个Thread分配给CPU时,它会把该Thread特有的信息...
分类:
编程语言 时间:
2014-06-16 18:58:52
阅读次数:
405
多线程间共享数据问题
一、Synchronized关键字
atomic一词与“原子”无关,它曾经被认为是物质的最小的单元,不能再被拆解成更小的部分。
当一个方法被声明成synchronized,要执行此方法的thread必须先取得一个token,我们将它称为锁。一旦该方法取得(或者说是获得)锁,它将运行此方法然后释放掉(或者返回)此锁。不管方法时怎样返回的(包...
分类:
编程语言 时间:
2014-06-15 17:36:35
阅读次数:
359
继承 Thread 类,重写 run 方法实现Runnable 接口 new Thread(new Runnable() { @Override public void run() { } });class t1 extends Thread{ @Override public void run()...
分类:
编程语言 时间:
2014-06-15 14:09:30
阅读次数:
270
一、等待与通知
public final void wait() throws InterruptedException
等待条件的发生。
public final void wait(long timeout) throws InterruptedException
等待条件的发生。如果通知没有在timeout指定的时间内发生,它还是会返回。
public fi...
分类:
编程语言 时间:
2014-06-14 14:10:33
阅读次数:
425
第一章 Thread导论
为何要用Thread ?
非阻塞I/O
I/O多路技术
轮询(polling)
信号
警告(Alarm)和定时器(Timer)
独立的任务(Task)
并行算法
第二章 Thread的创建与管理
一、什么是Thread ?
Thread是所在主机执行的应用程序任务(task)。
...
分类:
编程语言 时间:
2014-06-14 07:35:10
阅读次数:
367