一、线程和进程
进程是指正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。线程是进程中的单个顺序控制流,是一条执行路径, 一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行路径,则称为多线程程序。一个java程序想要运行,首先由java命令启动JVM,JVM启动就相当于启动了一个进程。接着有该进程创建了一个主线程去调用main方法。java虚拟机的启动至少调用了main线程和用于垃圾回收的线程所以为多线程程序。
如何实现多线程程序呢?java有两种方式实现多线程程序:方式1:继承Thread类。
A:自定义类MyThread继承Thread类。
B:MyThread类里面重写run(),重新的代码部分就是想要被多线程程序执行的代码。
C:创建对象:MyThread my = new MyThread();
D:启动线程:my.start();注意此处,调用的是线程对象的start()方法,run()方法仅仅封装被线程执行的代码,直接调用是普通方法, start()方法调用之后,首先启动了线程,然后再由jvm去调用该线程的run()方法。
public class MyThread extends Thread {
@Override
public void run() {
for (int x = 0; x < 200; x++) {
System.out.println(x);
}
}
}
//测试类
public class MyThreadDemo {
public static void main(String[] args) {
// 创建两个线程对象
MyThread my1 = new MyThread();
MyThread my2 = new MyThread();
my1.start();
my2.start();
}
}
方式2:实现Runnable接口(相比较而言解决了java单继承的问题,当一个有继承关系的类想要实现多线程可以实现该接口)
A:自定义类MyRunnable实现Runnable接口 :class MyRunnable implements Runnable(){}
B:重写run()方法
C:创建MyRunnable类的对象 MyRunnable mr =new MyRunnable();
D:创建Thread类的对象,并把C步骤的对象作为构造参数传递 Thread t1 = new Thread(mr);
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
// 由于实现接口的方式就不能直接使用Thread类的方法了,但是可以间接的使用
System.out.println(Thread.currentThread().getName() + ":" + x);
}
}
}
//测试类
public class MyRunnableDemo {
public static void main(String[] args) {
// 创建MyRunnable类的对象
MyRunnable my = new MyRunnable();
// Thread(Runnable target, String name)
Thread t1 = new Thread(my, "Thread-0");
Thread t2 = new Thread(my, "Thread-1");
t1.start();
t2.start();
}
}