并发:交替进行
并行:同时进行
创建多线程:
-
创建一个继承Thread类的类
-
-
创建Thread类的子类对象
-
调用Thread类的start()方法
//使用匿名内部类创建多线程
public class Thread01 {
public static void main(String[] args) {
new Thread(){
-
创建一个Runnable接口的实现类
-
在实现类中重写Runnable接口的run方法,设置线程任务
-
创建一个Runnable接口的实现类对象
-
创建Thread类对象,构造方法中传递Runnable接口的实现类对象
-
调用Thread类中的start方法,开启新线程执行run方法
//使用匿名内部类创建多线程
public class Thread01 {
public static void main(String[] args) {
new Thread(new Runnable() {
实现Runnable接口的好处:
-
避免了单继承的局限性
一个类只能继承一个类,类继承Thread类就不能继承其他的类。
-
增强了程序的扩展性,降低了程序的耦合性(解耦)
实现Runnable接口的方法,把设置线程任务和开启新线程进行了分离(解耦)。
run和start区别:
-
直接调用线程类的run()方法,它就会被当做一个普通的函数调用,程序中任然只有主线程这一个线程。也就是说,star()方法可以异步地调用run()方法,但是直接调用run()方法确实同步的,因此也就不能达到多线程的目的。
run()和start()的区别可以用一句话概括:单独调用run()方法,是同步执行;通过start()调用run(),是异步执行。
-
run只是Thread里面的一个普通方法,start是启动线程的方法。
获取线程的名称:Thread.currentThread().getName()