Java基础——线程总结
一、线程是什么?
线程:一个程序里不同的执行路径。
二、如何创建线程?
两种方法创建线程:
第一种
(1)定义具体功能类实现Runnable接口,可以多次调用而实现数据共享
(2)Thread myThread = new Thread(…) //参数为Runnable接口类型
(3)Runnable中只有一个方法
public void run(){……} //用以定义线程运行体
第二种
(1)定义一个Thread的子类并重写run()方法
class MyThread extends Thread {
public void run(){……}
}
(2)生成该类的对象
MyThread myThread = new MyThread (…)
三、可以对线程做哪些控制?
方法 | 功能 |
bool isAlive(myThread Thread) | 判断线程是否还“活”着,即线程是否还未终止。 |
int getPririty() | 获得线程的优先级数值 |
void setPriority(int NewPriority) | 设置线程的优先级数值 |
Thread.sleep(int sleepTime) | 指定当前线程的睡眠时间(单位:毫秒) |
void join() | 将当前线程与上一主线程合并,即A线程的a()方法调用了B线程,则让B线程结束,再恢复A线程继续执行。 |
void yield() | 让出CPU,当前线程进入就绪队列等待调度。 |
void wait() | 当前线程进入对象的wait pool。 |
void notify()/void notifyAll() | 唤醒对象的wait pool中的一个/所有等待线程。 |
四、辨析wait()与sleep()
之所以对这两个方法辨析,它们有个共同点——暂停线程的执行。但要说起它们的不同点,那还是挺多的。
不同点:
(1)Wait()是Object对象的方法;而Sleep(int sleepTime)是Thead()线程的方法。
(2)Wait()执行后,当前对象的锁就会被释放;而Sleep(int)执行后,锁仍然在其手中。
(3)Wait()不需要指定停留时间,需要notify()方法或notifyAll()方法将其唤醒;而Sleep(int),其中int指定睡眠的毫秒数,只有在超过这个时间后,醒过来,当再次获得时间片之后,才能继续执行。