多線程:多件事情一起處理。
第一種: extend Therad 繼承
//啟動(dòng)類(lèi)
public class Main {
static int count = 20;
public static void main(String[] args) {
ThreadA threadA = new ThreadA();//直接實(shí)例化一個(gè)線程A類(lèi) 并用start()啟動(dòng)
threadA.start();
ThreadB threadB = new ThreadB();//直接實(shí)例化一個(gè)線程B類(lèi) 并用start()啟動(dòng)
threadB.start();
//---------------------------------------
//自己本身還在運(yùn)行
for(int i=0;i<5;i++){
System.out.println("本身:"+ Main.count--);
try {
Thread.sleep(150); //休眠200毫秒 方便觀察結(jié)果
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//線程A類(lèi)
class ThreadA extends Thread {
public void run() {
//循環(huán)輸出公共變量 并減一
for(int i=0;i<5;i++){
System.out.println("線程AAA:"+ Main.count--);
try {
sleep(200); //休眠200毫秒 方便觀察結(jié)果
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//線程B類(lèi)
class ThreadB extends Thread {
public void run() {
//循環(huán)輸出公共變量 并減一
for(int i=0;i<5;i++){
System.out.println("線程BBBBBB:"+ Main.count--);
try {
sleep(100); //休眠100毫秒 方便觀察結(jié)果
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
#輸出結(jié)果
本身:20
線程BBBBBBB:18
線程AAA:19
線程BBBBBBB:17
本身:16
線程AAA:15
線程BBBBBBB:15
本身:14
線程BBBBBBB:13
線程BBBBBBB:12
線程AAA:12
本身:11
本身:10
線程AAA:9
線程AAA:8
第二種: implements Runnable 實(shí)現(xiàn)。因?yàn)閖ava是單繼承,所以當(dāng)類(lèi)已經(jīng)繼承過(guò)其他類(lèi)時(shí),使用第二種實(shí)現(xiàn)多線程的方式
public class MainA {
static int count = 20;
public static void main(String[] args) {
//實(shí)例化線程AA
ThreadAA threadAA = new ThreadAA();
//實(shí)例化線程類(lèi) 并把線程AA當(dāng)做參數(shù)傳入
Thread threadA = new Thread(threadAA);
//啟動(dòng)線程AA
threadA.start();
//----------------------------------------
//實(shí)例化線程BB
ThreadBB threadBB = new ThreadBB();
//實(shí)例化線程類(lèi) 并把線程B當(dāng)做參數(shù)傳入
Thread threadB = new Thread(threadBB);
//啟動(dòng)線程BB
threadB.start();
//---------------------------------------
//自己本身還在運(yùn)行
for(int i=0;i<5;i++){
System.out.println("本身:"+ Main.count--);
try {
Thread.sleep(150); //休眠200毫秒 方便觀察結(jié)果
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//實(shí)現(xiàn) Runnable
class ThreadAA implements Runnable{
public void run() {
for(int i=0;i<5;i++){
System.out.println("線程AAA:"+ Main.count--);
try {
Thread.sleep(200); //休眠200毫秒 方便觀察結(jié)果
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//實(shí)現(xiàn) Runnable
class ThreadBB implements Runnable{
public void run() {
for(int i=0;i<5;i++){
System.out.println("線程BBBBBBB:"+ Main.count--);
try {
Thread.sleep(100); //休眠100毫秒 方便觀察結(jié)果
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
#輸出結(jié)果
本身:20
線程BBBBBBB:18
線程AAA:19
線程BBBBBBB:17
本身:16
線程AAA:15
線程BBBBBBB:15
本身:14
線程BBBBBBB:13
線程BBBBBBB:12
線程AAA:12
本身:11
本身:10
線程AAA:9
線程AAA:8