正在运行的程序,是系统进行资源分配的基本单位
目前操作系统都是支持多进程,可以同时执行多个进程,通过进程ID区分
单核CPU在同一时刻,只能有一个进程;宏观并行,微观串行
二、线程的概念线程,又称为轻量级进程(Light Weight Process)
进程中的一条执行路径,也是CPU的基本调度单位。
一个进程由一个或多个线程组成,彼此间完成不同的工作,同时执行,称为多线程。
三、进程和线程的区别1.进程是操作系统资源分配的基本单位,而线程是CPU的基本调度单位。
2.一个程序运行后至少有一个进程
3.一个进程可以包含多个线程,但是至少需要有一个线程,否则这个进程是没有意义。
4.进程间不能共享数据段地址,但是同进程的线程之间可以
四、线程的组成任何一个线程都具有基本的组成部分
CPU时间片: 操作系统(OS)会为每个线程分配执行时间
运行数据:
堆空间: 存储线程需要的对象,多个线程可以共享堆中的数据。
栈空间: 存储线程需使用的局部变量,每个线程都拥有独立的栈。
线程的逻辑代码.
五、线程的特点1. 线程抢占式执行
效率高
可防止单一线程长时间独占CPU.
2. 在单核CPU中,宏观上同时执行,微观上顺序执行
六、线程的创建方式1. 【继承Thread类,重写run方法】
2. 【实现Runnable接口】
3. 实现Callable接口
1.创建
2. 获取和设置线程的名称
(1)获取线程ID和线程名称
1. 在Thread的子类中调用this.getId()或this.getName()
2. 使用Thread.currentThread().getId()和
Thread.currentThread().getName()
(2)修改线程名称
1. 调用线程对象的setName()方法
2. 使用线程子类的构造方法赋值
例子:4个窗口各卖100张票
public class Thread_01 extends Thread{
int num=100;
@Override
public void run() {
for (int i=0;i<=100;i++){
System.out.println(Thread.currentThread().getName()+"卖的第"+i+"张票");
}
}
}
public class Test02 {
public static void main(String[] args) {
int num=100;
Thread_01 m1=new Thread_01();
m1.start();
Thread_01 m2=new Thread_01();
m2.start();
Thread_01 m3=new Thread_01();
m3.start();
Thread_01 m4=new Thread_01();
m4.start();
}
}
八、创建线程(实现Runnable接口)
1.创建
2.例子:4个窗口共卖100张票
public class MyRunnable implements Runnable{
static int num=100;
@Override
public void run() {
while (num>0){
num--;
System.out.println(Thread.currentThread().getName()+"还剩"+num+"张票");
}
}
}
public static void main(String[] args) {
MyRunnable myRunnable=new MyRunnable();
Thread t1=new Thread(myRunnable,"售票员1");
Thread t2=new Thread(myRunnable,"售票员2");
Thread t3=new Thread(myRunnable,"售票员3");
Thread t4=new Thread(myRunnable,"售票员4");
t1.start();
t2.start();
t3.start();
t4.start();
}
九、线程的状态
十、线程的常用状态
休眠:
public static void sleep(long millis)
当前线程主动休眠millis毫秒。
放弃:
public static void yield()
当前线程主动放弃时间片,回到就绪状态,竞争下一次时间片
加入:
public final void join()
允许其他线程加入到当前线程中



