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);
  }
 }
}
运行结果:

在这里插入图片描述

为什么两个线程会交叉执行呢?😀 在JAVA中多个线程都被启动同时工作时,CPU的使用权是如何分配的?每个线程的生命周期又是怎样的呢?我将在下一篇文章详细介绍o( ̄▽ ̄)ブ
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章