1.创建并启动线程的6种方式:
1)继承Thread类创建线程
2)实现Runnable接口创建线程
3)使用Callable和FutureTask创建线程
4)使用线程池,例如用Executor框架
5)Spring实现多线程(底层是线程池)
6)定时器Timer (底层封装了一个TimerThread对象)
1.1 继承Thread类创建线程
1.1.1继承Thread类方式创建线程的实现步骤:
步骤:
1):定义一个类A继承于java.lang.Thread类.
2):在A类中覆盖Thread类中的run方法.
3):我们在run方法中编写需要执行的操作---->run方法里的,线程执行体.
4):在main方法(线程)中,创建线程对象,并启动线程.
创建线程类对象: A类 a = new A类();
调用线程对象的start方法: a.start();//启动一个线程
注意:千万不要调用run方法,如果调用run方法好比是对象调用方法,依然还是只有一个线程,并没有开启新的线程.
1.1.2需求:使用两个线程实现边听歌边打游戏
实现代码:
//音乐线程
public class MusicThread {
public static void main(String[] args) {
//创建游戏线程对象
GameThread game = new GameThread();
//启动游戏线程
game.start();
while(true){
System.out.println(Thread.currentThread().getName()+"听音乐!");
}
}
}
//游戏线程
class GameThread extends Thread{
@Override
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName()+"打游戏!");
}
}
}
注意:有的小伙伴可能觉得音乐线程没有启动,在这里其实音乐线程已经启动起来了,而启动音乐线程的对象就是我们的JVM,此处main方法其实启动的时候会创建一个主线程去执行main方法,所以我在这里使用主线程作为了我的音乐线程.
1.2 实现Runnable接口创建线程
1.2.1实现Runnable接口方式创建线程的实现步骤:
1):定义一个类A实现于java.lang.Runnable接口,注意A类不是线程类.
2):在A类中覆盖Runnable接口中的run方法.
3):我们在run方法中编写需要执行的操作---->run方法里的,线程执行体.
4):在main方法(线程)中,创建线程对象,并启动线程.
创建线程类对象: Thread t = new Thread(new A());
调用线程对象的start方法: t.start();
1.2.2需求:使用两个线程实现边听歌边打游戏
实现代码:
//音乐线程
public class MusicThread {
public static void main(String[] args) {
//创建游戏线程对象
Thread game = new Thread(new Game());
//启动游戏线程
game.start();
while(true</