-
进程:当前正在运行的程序,一个程序在内存中的执行区域
-
线程:进程中的执行控制单元,执行路径。一个进程可以有一个线程、也可以有多个线程
-
单线程:安全性高,效率低。
-
多线程:安全性低,效率高。
-
方式1:继承Thread
方式1:继承Thread。重写run方法,创建线程对象,调用static开启线程
-
子类继承Thread具备多线程能力
-
启动线程:子类对象.static
-
不建议使用:避免OOP单继承局限性
package com.zl.thread;
/*
多线程:创造多个线程,交替执行操作,根据CPU自己调度
创建多线程方式1:继承Thread,重写run方法,创建线程对象,调用start开启线程
注意:开启线程后,多线程交替执行,由CPU自己调度
*/
public class DemoThread extends Thread {
@Override
//run线程体
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("thread方法---"+i);
}
}
//main线程,主方法
public static void main(String[] args) {
//创建多线程对象
DemoThread demoThread = new DemoThread();
//开启多线程
demoThread.start();
for (int i = 0; i < 200; i++) {
System.out.println("main方法"+i);
}
}
}
方式2:实现Runnable接口
-
实现Runnable具有多线程能力
-
启动线程:传入目标对象+Thread.static
-
建议使用:避免单线程的局限性,灵活方便,方便同一个对象被多个线程使用
package com.zl.thread;
/**
* 创建线程方式2:实现Runnabie接口,重写run方法。创建线程对象,,将实现类的对象放入Thread里面,调用static方法开启线程
*/
public class DemoRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("学习多线程"+i);
}
}
public static void main(String[] args) {
//创建实现类对象
DemoRunnable demoRunnable = new DemoRunnable();
//创建Thread对象,将实现类对象写入Thread,调用static开启线程
new Thread(demoRunnable).start();
//main方法中的方法体
for (int i = 0; i < 200; i++) {
System.out.println("main方法Java"+i);
}
}
}