多线程(一):线程的创建及使用
一、启动多线程的三种方法
1.继承Thread类,重写run方法,启动->直接start()
/**
* 启用线程方式一
*/
public void thread01(){
new MyThread().start();
}
public class MyThread extends Thread {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread01执行完成!!!");
}
}
2.实现Runnable接口,重写run方法,启动->直接Thread(Runn…).start()
/**
* 启用线程方式二
*/
public void thread02(){
new Thread(new MyRunnable()).start();
}
public class MyRunnable implements Runnable {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread02执行完成!!!");
}
}
3.Lambda形式启动线程
/**
* 启用线程方式三
*/
public void thread03(){
new Thread(()->{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread03执行完成!!!");
}).start();
}
二、线程等待(join的用法)
join之后的代码,需要等待线程执行完成之后才会执行,加入join方法之后,“主线程”需要等待“子线程”结束之后才能继续运行!
public void testJoin() throws InterruptedException {
Thread t1 = new Thread(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(System.currentTimeMillis()+"->Thread01执行完成!!!");
});
Thread t2 = new Thread(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(System.currentTimeMillis()+"->Thread02执行完成!!!");
});
t1.start();
t2.start();
System.out.println(System.currentTimeMillis()+"->join前~~~");
t1.join();
t2.join();
System.out.println(System.currentTimeMillis()+"->join后~~~");
}
最终的执行结果如下👇