进程 & 线程
- 进程 : 进程是一次程序的执行,是一个程序及其数据在处理机上顺序执行时发生的活动,是程序在一个数据集合上运行的过程,它是系统进行资源调度的一个独立的单位
- 线程: 线程可以理解为在进程中独立运行的子任务。如在QQ。exe 这个进程中,有下载文件线程、传输数据线程,发生数据线程等。
- 一个进程至少含有一个线程。一个进程中的数据可以被多个进程共享
- 在多线程中,线程的执行是异步的,调用顺序是随机的
实现多线程编程方式 :继承Thread 类、实现Runnable接口
public class Thread implements Runnable{}
public class myThread extends Thread{}
currentThread()方法
- 返回代码正在被哪个线程调用的信息
isAlive()方法
判断线程是否处于活动状态
sleep()方法
sleep ()方法的作用是在指定的毫米数内让当前“正在执行的线程”休眠(暂停执行)
getId()方法
- getId方法的作用是取得线程的唯一标识
停止线程
无法停止的线程
//类MyThread.class
public class MyThread extends Thread{
@Override
public void run() {
super.run();
for(int i=0;i<=5000;i++){
System.out.println("i="+(1+i));
}
}
}
//mian.class
public class Main{
public static void main(String args[]){
MyThread myThread=new MyThread();
myThread.start();
try {
Thread.sleep(1000);
Thread.interrupted();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
终止线程的三种方法
- 使用退出标志,使线程正常退出
- 使用stop()方法强行退出(不推荐)。stop()和suspend()以及resume()方法已经是过期的方法。容易产生不可预期的结果
- 使用interrupt()方法中断线程
判断线程停止
- this.interrupted():测试当前线程是否已经中断
- this.isInterrupted():测试线程是否已经中断
yield()方法
yield()方法的作用是放弃当前线程的CPU资源,将它让给其他任务去占用CPU执行时间.但是放弃的时间不确定,可能刚刚放弃,就会马上获取CPU时间片
线程优先级
- 线程可以划分优先级,优先级较高的得到cpu的资源较多。CPU优先执行优先级较高的线程,setPriority()方法可以设置优先级(1~9)
- 线程优先级具有继承性的特性,A线程创建B线程,B线程继承A线程的优先级
- 线程优先级具有规则性,高优先级的线程大部分总是先执行完
- 线程优先级还具有随机性,线程优先级高的线程不一定每次都先执行完
守护者线程
- 在Java中有两种线程,一种是用户线程,一中是守护线程
- 守护线程是特殊的线程,进程有不存在非守护线程时,守护线程会自动销毁。(thread.setDaemon(true)设置为守护线程)