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( ̄▽ ̄)ブ
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章