JAVA 多线程 第一篇——实现多线程的两个方法 (小白必看)
JAVA多线程
进程和线程
进程(Process)
⚪进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。(选自百度百科)
线程(Thread)
⚪一个进程包含多个线程,多个线程共享同一个内存地址,共享同一块资源。
JAVA实现多线程的两个方法:(继承和接口)
一、继承(extends) Thread方法
1.在类名之后使用extends关键字继承Thread类。
2.重写run()方法。
3.用start()方法启动线程。
实例1
1.在本类中实现第一步和第二步
public class MyThreadOne extends Thread{
//1.继承Thread类
//2.重写run方法
@Override
public void run() {
// TODO 自动生成的方法存根
/*线程体*/
System.out.println("-----------线程中的输出");
}
2.然后在主类中启动线程
public class TestOne {
public static void main(String[] args) {
//主线程
//创建线程
MyThreadOne myThread1 = new MyThreadOne();
//启动线程
myThread1.start(); //此时已经有两条路线了
//start() 启动线程,java虚拟机调用线程的run方法
//如果直接调用线程中的run方法,还是普通的调用方法,而非启动了一个新的线程。
System.out.println("-----main方法中的输出");
}
}
实例2
public class MyThreadTwo extends Thread{
@Override
public void run() {
// TODO 自动生成的方法存根
for (int i = 0; i < 10; i++) {
System.out.println("------副线程中的for循环"+i);
}
}
}
public class ThesTwo {
public static void main(String[] args) {
//主线程
//创建副线程
MyThreadTwo myThread2 = new MyThreadTwo();
//启动线程
myThread2.start();
//主线程中的for循环
for (int i = 0; i < 10; i++) {
System.out.println("主线程中的for循环------"+i);
}
}
}
提示:采用继承Thread方法的缺点是
JAVA每个类只能使用extend语句来继承唯一一个类
如果使用本方法,本类将不能再继承别的类。
由于JAVA可以继承多个接口,所以,我们介绍第二种方法。
二、继承(implements) Runnable接口
1.继承Runnable接口。
2.实现run()方法。
3.使用Thread类做代理。
4.Thread类的代理调用start()方法启动线程。
⚪与第一种方法不同之处在于
本方法在启动线程时不可以直接使用线程类名调用start()方法。
而是首先要新建Thread类并让其作为本接口的代理(见第二个代码实例6-7行)
然后使用代理调用start()方法。
实例1
public class MyThreadOne implements Runnable{
//1.实现Runnable接口
@Override
public void run() {
//2.实现run方法
// TODO 自动生成的方法存根
for (int i = 0; i < 10; i++) {
System.out.println("线程1中的for循环------"+i);
}
}
}
public class TestOne {
public static void main(String[] args) {
//创建线程
MyThreadOne myThread1 = new MyThreadOne();
//启动线程
Thread t = new Thread(myThread1); //3.调用Thread类的start方法来启动线程
t.start();
//主线程的循环
for (int i = 0; i < 10; i++) {
System.out.println("------主线程中的for循环"+i);
}
}
}