多线程的学习(视频部分学习)
-
什么是进程?
进程就是当前正在运行的程序,一个应用程序在内存中的执行区域。比如说qq正在运行,那么qq其实就是一个进程。 -
什么是线程?
进程中的一个执行控制单元,执行路径。比如qq中的视频功能在运行的时候就是一个线程,聊天也是一个线程。
一个进程可以有一个线程,也可以有多个线程。
实现方法:
1. 将类声明为Thread的子类,该子类应该重写Thread类的run方法。
举例:
public class MyThread extends Thread {
@Override
public void run() {
for(int i=0;i<200;i++) {
System.out.println(getName() + ":"+ i);
}
}
}
在上面这个程序中,MyThread类继承了Thread类,并且在类中将run方法重写,将会打印出当前线程的名字和1-200之间的数字。
public class Main {
public static void main(String[] args) {
//创建线程实例1
MyThread myThread1 = new MyThread();
myThread1.setName("第一个线程");
//创建线程实例2
MyThread myThread2 = new MyThread();
myThread2.setName("第二个线程");
//创建线程实例3
MyThread myThread3 = new MyThread();
myThread3.setName("第三个线程");
//启动线程
myThread1.start();
myThread2.start();
myThread3.start();
}
}
创建线程实例,并且启动成功。
此时我们发现这个线程并不是顺序执行,而是交替进行,因为电脑的cpu在执行线程的时候有随机性,所以会出现这这样的情况。
2. 实现Runnable接口的方法
这种方法先实现Runnable接口,实现run方法
public class MyThread2 implements Runnable {
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
然后创建runnable的子类对象,并将这个对象传入到线程的构造方法中,开启线程。
public class ThreadDemo1 {
public static void main(String[] args){
//创建线程实例1
MyThread2 mt1 = new MyThread2();
Thread thread1 = new Thread(mt1);
thread1.setName("张三");
//创建线程实例2
MyThread2 mt2 = new MyThread2();
Thread thread2 = new Thread(mt2);
thread2.setName("李四");
//启动线程
thread1.start();
thread2.start();
}
}
最后运行出来: