首先要了解什么叫进程什么叫线程
进程理解:
进程就是进程(Process)是操作系统分配资源的基本单位,一个进程拥有的资源有自己的堆、栈、虚存空间(页表)、文件描述符等信息。从编程的角度来理解进程,可以把它看作是一个类或一个 PCB(Process Control Block)进程控制块的结构体,这个结构体中大致包含以下几个内容:
1.进程编号 PID:进程的身份标识。
2.进程的状态:
新建状态
就绪状态
运行状态
阻塞状态
销毁状态
3.执行优先级
4.上下文:保存本次执行状态,以便下次继续执行,这个过程就是一个上下文。
5.内存地址
线程理解:
线程(Thread)是操作系统能够进行运算调度的基本单位。它包含在进程中,是进程中的实际运行单位。在 Unix System V 及 SunOS 中线程也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
用户线程可以理解为应用程序自己的线程,
由程序员创建并控制的线程,
而内核线程是内核支持并使用的线程。
小知识:
Thread只能使用extends【继承方法】
Runnable只能使用implements【继承接口】
java简单实现多线程笔记:
有三个文件【两个线程文件,一个主文件】
主文件如下:
public class MultiThread { public static void main(String[] args) { ThreadDemo threadDemo=new ThreadDemo(); threadDemo.setName("letter Thread"); threadDemo.start(); ThreadDemo2 threadDemo2=new ThreadDemo2(); threadDemo2.setName("digit Thread"); threadDemo2.start(); } }
线程文件:
1.public class ThreadDemo extends Thread{ private char[] letter={'A','B','C','D','E'}; @Override public void run() { String name=Thread.currentThread().getName(); Long start=System.currentTimeMillis(); System.out.println(name+"输出字母开始时间:"+start); for (int i=0;i<5;i++){ System.out.println(name+" 输出字母:"+letter[i]); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } Long end=System.currentTimeMillis(); System.out.println(name+"输出字母开始时间:"+end); } }
线程文件:
public class ThreadDemo2 extends Thread{ private int digit =0; @Override public void run() { String name=Thread.currentThread().getName(); Long start=System.currentTimeMillis(); System.out.println(name + " 输出数字开始时间:"+start); for (digit = 0; digit < 10; digit++) { System.out.println(Thread.currentThread().getName()+"字母是:"+digit); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } Long end=System.currentTimeMillis(); System.out.println(name + " 输出数字结束时间:"+end); } }
ps:digit数字 letter字母
这就是两个线程同时执行的示例
输出结果为: