进程:计算机需要执行多个程序,所以需要分成多个小任务,每一个就是一个进程
线程:进程可以分为多个可执行的小任务,每一个就是一个线程
计算机上的任务是由CPU来执行的,在某个时间点,某个核中只能执行一个进程。
而进程是由线程组成,所以同一时刻CPU只能执行某个线程
多线程:
线程的工作职责分为和CPU交互或者和硬件交互,当线程和硬件交互时,CPU处于空闲状态,
多线程则可以提高CPU的利用率(理论上最好状态是100%)
创建多线程方式:
继承Thread类
线程竞争图:
//main方法是主线程,
public static void main(String[] args) {
//不需要创建主线程,JAVA虚拟机会自动创建
//创建支线程
TDemo t1=new TDemo("1111");
TDemo t2=new TDemo("2222");
//使用父类Thread中的start()方法,开启线程
t1.start();
t2.start();
//然后再运行一下主线程,看运行效果
for (int i = 0; i < 20; i++) {
System.out.println("这是主线程"+i);
//主线程也可以休眠,直接使用Thread类名,调用sleep()方法,可以让主线程休眠
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//代表线程的类--->描述线程的任务信息
class TDemo extends Thread{
//用来记录线程名字,方便看到运行效果
private String name;
public TDemo(String name){
super();
this.name=name;
}
//一定要重写的方法 run(),线程的具体任务信息是在方法里面进行描述
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(name+"i="+i);
//为了看到演示效果,线程休眠
try {
// 线程休眠可能会不能再次激活,所以必须自己捕获
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果:
但是这种方式并不灵活,JAVA中是单继承,如果当前类继承了Thread类,就不能继承其他的类,所以使用继承非常的不灵活
下一篇,将使用实现Runnable接口,实现线程
JAVA版线程基础案例二:实现Runnable完成线程
提升案例,线程不安全的卖票程序(实际上把输出改成了抢糖)
JAVA版本,线程三:线程实现卖票程序