一、继承Thread类:
package com.etc.demo;
class ThreadDemo extends Thread {
public void run() {
for(int i = 1; i <= 3; i++) {
System.out.println("继承Thread类的线程在执行....."+i);
}
}
}
启动线程:调用Thread类的start()方法
package com.etc.demo;
public class TestThread {
public static void main(String args[]) {
ThreadDemo t2 = new ThreadDemo();
t2.start();//启动新开辟的线程
for(int i=1;i<=3;i++){
System.out.println("主线程在执行......."+i);
}
}
}
执行结果:每次的执行结果可能不同
主线程在执行.......1
继承Thread类的线程在执行.....1
继承Thread类的线程在执行.....2
继承Thread类的线程在执行.....3
主线程在执行.......2
主线程在执行.......3
或者:
主线程在执行.......1
主线程在执行.......2
主线程在执行.......3
继承Thread类的线程在执行.....1
继承Thread类的线程在执行.....2
继承Thread类的线程在执行.....3
二、实现Runnable接口:
package com.etc.demo;
class RunnableDemo implements Runnable {
public void run() {
for(int i = 1; i <= 3; i++) {
System.out.println("实现Runnable接口的线程在执行....."+i);
}
}
}
启动线程:
package com.etc.demo;
public class TestThread {
public static void main(String args[]) {
RunnableDemo r1 = new RunnableDemo();
Thread t1 = new Thread(r1);
t1.start();//启动新开辟线程,和主线程交替执行
for(int i=1;i<=3;i++){
System.out.println("主线程在执行....."+i);
}
}
}
执行结果:每次的执行结果可能不同
主线程在执行.....1
实现Runnable接口的线程在执行.....1
实现Runnable接口的线程在执行.....2
主线程在执行.....2
实现Runnable接口的线程在执行.....3
主线程在执行.....3
或者:
主线程在执行.....1
实现Runnable接口的线程在执行.....1
实现Runnable接口的线程在执行.....2
实现Runnable接口的线程在执行.....3
主线程在执行.....2
主线程在执行.....3
注意:
run()仅仅是封装被线程执行的代码,直接调用是普通方法
start()首先启动了线程,然后由jvm调用线程的run()方法
public class TestThread {
public static void main(String args[]) {
RunnableDemo r1 = new RunnableDemo();
r1.run();//没有启动新开辟的线程,等到run()方法执行完了再执行main()方法
for(int i=1;i<=3;i++){
System.out.println("主线程在执行......."+i);
}
}
}
执行结果:每次执行结果都一样
实现Runnable接口的线程在执行.....1
实现Runnable接口的线程在执行.....2
实现Runnable接口的线程在执行.....3
主线程在执行.......1
主线程在执行.......2
主线程在执行.......3