1 线程与进程的本质区别:每个进程拥有自己的一整套变量,而线程共享数据。这使得线程间通信更有效,容易。
2 java.lang.Thread 1.0
static void sleep(long millis) 休眠给定的毫秒数
3 Runnable接口中只有一个方法:run()
4 实现线程有两种方式;实现Runnable接口或是继承Thread(此方式目前已不推荐)。
5 线程简单示例:
class MyRunnable implements Runnable{
public void run(){
task code
}
}
MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();
6 不要调用Thread类或Runnable对象的run方法。直接调用run方法,只会执行同一个线程中的任务,而不会启动新的线程。
7 java.lang.Thread 1.0
Thread(Runnable target) 构造一个新线程,用于调用给定target的run方法。
void start() 启动这个线程,将引发调用run方法。
void run() 调用关联Runnable的run方法。
8 java.lang.Runnable 1.0
void run() 必须覆盖这个方法,并在其中提供要执行的任务。
9 可以用interrupt方法来请求终止线程。stop和suspend方法都遭到了弃用。
10 java.lang.Thread 1.0
void interrupt() 向线程发送一个请求。
static boolean interrupted()测试线程是否被中断,产生副作用--将线程中断状态置为false
boolean isInterrupted()测试线程是否中断,不产生副作用。
static Thread currentThread()返回代表当前执行线程的Thread对象。
11 线程的六种状态:New(新生)Runnable(可运行)Blocked(阻塞)Waiting(等待)Timed waitin(计时等待)Terminated(被终止)
12 java.lang.Thread 1.0
void join()等待终止指定的线程。
void join(long millis)等待指定的线程死亡或者经过指定的毫秒数
Thread.State getState() 5.0获得线程状态。
13 线程有10个优先级,范围由1到10 ,优先级由小到大。 可以由 void setPriority(int newPriority)来设定
14 守护进程的唯一用途是为其他线程提供服务,如计时线程。当只剩下守护进程时,虚拟机就退出了。守护进程应该永远不去访问固有资源。
void setDaemon(boolean isDaemon) 用来标识该线程为守护线程或用户线程。
15 用ReentrantLock保护代码块的基本机构如下:
myLock.lock(); //可重入锁表示线程可以重复地获得已经持有的锁。
try{
critical section
}
finally{
myLock.unlock();
}
16 java.util.concurrent.locks.Lock
void lock()获得这个锁,若是锁同时被另一个线程拥有,则发生拥塞。
void unlock()释放这个锁。
java.util.concurrent.locks.ReentrantLock
ReentrantLock()构建一个可以被用来保护临界区的可重入锁。
ReentrantLock(boolean fair)构建一个带公平策略的锁。
17 java.util.concurrent.locks.Lock
Condition newCondition()返回一个与该锁相关的条件对象。
java.util.concurrent.locks.Condition 5.0
void await() 将该线程放到条件的等待集中去。
void signalAll() 解除该条件的等待集中的所有线程的阻塞状态。
void signal()从该条件的等待集中随机选取一个线程,解除其阻塞状态。
18 java中的每一个对象都有一个内部锁。如果一个方法用synchornized关键字声明,那么对象的锁将保护整个方法。
即要调用该方法,线程必须获得内部的对象锁。
此时,方法wait等同于上述的await方法,notify/notifyAll方法等同于signal/signalAll方法。
19 锁来管理那些试图进入synchornized方法的进程,由条件来管理那些调用wait的进程。
20 将静态方法声明为synchornized也是合法的。若调用这种方法,该方法获得相关类对象的内部锁。