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);
}
}
}