现代操作系统都可以执行多任务。多任务就是同时运行多个任务。即使是单核CPU可以同时运行多个任务,因为操作系统可以让CPU对多个任务轮流进行执行。
进程计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器也是一个进程。进程和线程的关系是:一个进程可以包含一个或者多个线程。
线程- 线程是进程的轻量级最小部分,可以与其它线程同时运行,线程是独立的,因为他们呢都有独立的执行路径。
- 一个线程中发生异常,不会影响其他线程的执行。
- 进程的所有线程共享公共内存。
- 同时执行多个线程的过程称为多线程。
- 多线程的目的是同时执行程序的多个部分,能够最大限度的利用CPU时间。
- 操作系统调度的最小任务单位是线程而不是进程。
当Java程序启动时,实际上是启动了一个JVM进程,然后JVM启动主线程来执行main()方法。在main()方法中,我们可以启动其它线程。
创建一个新线程,需要实例化一个Thread实例,然后调用它的start()方法,但是这个线程启动后实际上什么也不做就立刻结束了,我们希望新线程能执行指定的代码,可以从Tread派生一个自定义类,然后覆写run()方法:
package com.wtcto;
import java.io.*;
public class HelloJava{
public static void main(String[]args)throws IOException{
Thread t=new MyThread();
t.start();//启动新线程
}
}
class MyThread extends Thread{
public void run(){
System.out.println("start new thread!");
}
}
- Java用Thread对象表示一个线程
- 通过调用start()启用一个新线程
- 一个线程对象只能调用一次start()方法
- 线程的执行代码写在run()方法中
- 线程调用由操作系统决定,程序本身无法决定调度顺序
- Thread.sleep()可以把当前线程暂停一段时间
Java线程状态有几种:
- New:创建新的线程,尚未执行;
- Runnable:运行中的线程,正在执行run()方法的Java代码;
- Bloecked:运行中的线程,因为某些操作被阻塞而挂起;
- Waiting:运行中的线程,因为某些操作在等待中;
- Timed Waiting: 运行中的线程,因为执行sleep()方法正在计时等待;
- Terminated:线程已终止,因为run()方法执行完毕。
当线程启动后,它可以在Runnable、Blocked、Waiting和Timed Waiting这几个状态之间切换,直到最后变成Terminated状态,线程终止。



