简而言之:一个程序是由进程组成,一个进程是由线程组成的。一个程序中可以存在多个进程,一个进程中可以存在多个线程。
单线程:一条主线执行下去,没有分支。
public class TestMain {
public static void main(String[] args) {
method2("I LOVE JAVA");
}
public static void method1(String str) {
System.out.println("method1...");
System.out.println(str);
}
public static void method2(String str) {
System.out.println("method2...");
method1(str);
}
}
先执行main、接着执行method2、最后执行method1。
多线程:一条主线执行下去,有多个分支。也就是有多个分支会抢占CPU资源。
class SubThread1 extends Thread{
public void run() {
for(int i=1;i<=100;i++) {
if(i%2==0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class SubThread2 extends Thread{
public void run() {
for(int i=1;i<=100;i++) {
if(i%2!=0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
public class TestThread {
public static void main(String[] args) {
SubThread1 st1= new SubThread1();
SubThread2 st2= new SubThread2();
st1.start();
st2.start();
}
}
运行部分结果:
Thread-0:2
Thread-1:1
Thread-0:4
Thread-1:3
Thread-0:6
Thread-1:5
Thread-0:8
Thread-0:10
Thread-0:12
Thread-0:14
Thread-0:16
Thread-1:7
......
我们可以了解到多线程的使用不管是并发还是并行(多线程可能被分配到一个CPU内核中执行,也可能被分配到不同CPU执行),该方式都提高了CPU资源的利用率。