1、进程与线程
我们常用的QQ就是一个进程,但是只有在启动之后,才开启了一个进程,开启时需要一定的内存和资源来运行;而线程是在QQ启动之后运行的一些任务,比如QQ聊天、视频,都需要新的线程来执行该任务,即先有进程,然后再有线程。
2、Java程序中多线程的实现
线程的状态:
- start():线程状态变成可运行状态(并非调用start就直接运行了)
- sleep():当前所在线程休眠指定时间 ,静态方法,休眠过程中打断就抛出异常
- join():调用某线程的该方法,将当前线程与该线程"合并",即等待该线程结束,再恢复当前线程的运行。
- yield():当前线程进入运行状态,cpu去执行其它线程
继承Thread类和实现Runable接口,新线程执行,即是执行run()方法里的内容:
public class TestThread extends Thread {//继承Thread类,Thread内部同样是实现了Runable接口。实现多线程的方法一
public void run(){
int count = 0;
boolean keepRunning = true;
while(keepRunning){
System.out.println(getName()+ (++count));
if(count == 100){
keepRunning = false;
}
if(count%10== 0){
try {
Thread.sleep(1000);//当前线程进行休眠1000ms,在哪个线程里调用就休眠哪个线程
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//run方法结束即当前线程结束
}
public static void main(String[] args){
Thread testThread = new TestThread();
testThread.setName("Mr. Thread");
testThread.start();//进入可运行状态,并非直接就运行
Thread testRunnable = new Thread(new TestRunnable(),"Ms. Runnable");
testRunnable.start();//进入可运行状态,并非直接就运行
}
}
class TestRunnable implements Runnable{//实现Runnable接口 实现多线程的方法二
@Override
public void run() {
int count = 0;
boolean keepRunning = true;
while(keepRunning){
System.out.println(Thread.currentThread().getName()+ (++count));
if(count == 100){
keepRunning = false;
}
if(count%10== 0){
try {
Thread.sleep(1000);//当前线程进行休眠1s
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//run方法结束即当前线程结束
}