多线程
线程与进程的概念
进程:
a. 是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。
线程: 就是进程中的一部分 .
理解:
cpu=大工厂 进程=子工厂 线程=小工厂中员工
cpu 是一个大工厂,时刻在运行,有很多的小工厂,由于各种原因,导致一次只能一个小工厂在运转,—>Cpu任意时刻,只有一个进程在运行
每个小工厂中都有至少一个员工,–>一个进程至少有一个线程
每个小工厂有会有车间, 车间是工人共享的–>每一个进程都有一个自己的进程空间(虚空间),进程的内存空间是共享的
车间有些地方可以容纳多人(餐些地方至多只能容纳一个(厕所)
创建线程的两种方式
继承Thread类
a.继承Thread类 b.重写run() c.创建对象,调用start()
package com.lvliang.thread;
public class ThreadDemo {
public static void main(String[] args) {
Demo d = new Demo();
Demo d1 = new Demo();
//2个线程 每个都有自己的执行任务
d.start();
d1.start();
}
}
class Demo extends Thread {
public void run(){
for(int i = 0; i < 10; i++){
System.out.println(Thread.currentThread().getName()+"..."+i);
}
}
}
2.实现Runnable接口
aaa
避免了单继承的局限性,比如:
class Demo extends Person. 这样就无法继承Thread类 ,但是又想多线程,参考API发现
p
a.implements Runnable
b.重写run()
c.创建对象
Thread t = new Thread(runnable);
t.start();
package com.lvliang.thread;
public class Thread_Implements_Runnable {
public static void main(String[] args) {
Demo1 d = new Demo1();
Thread t = new Thread(d);
Thread t2 = new Thread(d);
t.start();
t2.start();
}
}
class Demo1 implements Runnable {
@Override
public void run() {
for(int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"..."+i);
}
}
}
两种创建线程的区别