进程
1. 进程是资源分配和调度的基本单位。
2. 一个进程包括一个后者多个线程。比方说,QQ.exe是一个进程,里面有多个任务,可以看做多个线程。
线程
概念
继承Thread类和实现Runnable接口。Thread类实现了Runnable接口,本质是一样的。主要区别在于,实现Runnable还可以继承其他类,但是继承了Thread类却不可以,因为java不支持多继承的原因。
主要的API
如何停止线程:
1. void interrupt()
执行此接口,并不能立即停止线程,只是会修改线程的状态。所有此接口后面的函数会继续执行。
2. boolean interrupted()
判断线程是否是中断状态,具有清除功能。第二次的时候就由true变成了false
3. boolean isInterrupted()
判断线程是否是中断状态,不具有清除功能·
public static boolean interrupted(){
return currentThread().isInterrupted(true);
}
public boolean isInterrupted(){
return isInterrupted(false);
}
private native boolean isInterrupted(boolean flag);
以上API和sleep()使用,抛出异常。是因为sleep()方法自带抛出InterruptedException异常
public static native void sleep(long l){
throws InterruptedException;
}
4. yield()
此方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用。但是放弃的时间又不确定,有可能刚刚放弃,又马上获取到了CPU。
5. 优先级
线程优先级最高为10,最低为1,平均默认为5。
6.守护线程
用户线程和守护线程之分,在JVM中,用户线程不存在了,那么守护线程也会自动销毁。如果至少存在一个用户线程,那么守护线程 必须存活。最典型的线程是垃圾回收(GC)线程。
public ThreadDemo extends Thread
public void test(){
ThreadDemo threadDemo = new ThreadDemo();
threadDemo.setDaemon(true); // 通过此API可以实现守护线程的设置。
threadDemo.start(); // 设置守护线程一定要在start前面
}
7. 死锁
问题描述
死锁问题的描述:
线程A和线程B ,资源1和资源2,如果线程A占用资源1,请求资源2。线程B占用资源2,请求资源1。 这样就形成了一个环状的链路,并且每个线程各自不释放自己已经占用的资源。